/*!
 * FusionCharts JavaScript Library
 * Copyright FusionCharts Technologies LLP
 * @license License Information at <http://www.fusioncharts.com/license>
 *
 * @author FusionCharts
 * @version 3.2.1-release
 *
 * Third-party attributions:
 * SWFObject v2.2 <http://code.google.com/p/swfobject/>
 * JSON v2 <http://www.JSON.org/js.html>
 * Firebug Lite 1.3.0 <http://getfirebug.com/firebuglite>
 * jQuery 1.4.2 <http://jquery.com/>
 */
(function () {
    if (typeof window.FusionCharts !== 'undefined') {
        return
    }
    var f = {},
        modules = {},
        argsT = ['swfUrl', 'id', 'width', 'height', 'debugMode', 'registerWithJS', 'bgColor', 'scaleMode', 'lang', 'detectFlashVersion', 'autoInstallRedirect'];
    f.extend = function (a, b) {
        var c = typeof arguments[arguments.length - 1] === 'boolean' ? arguments[arguments.length - 1] : false;
        var d = b,
            snk = a;
        if (typeof b === 'boolean' || arguments.length === 1) {
            snk = f.core;
            d = a
        }
        if (c === true) {
            snk = snk.prototype
        }
        for (var e in d) {
            snk[e] = d[e]
        }
        return snk
    };
    f.uniqueId = function () {
        return 'chartobject-' + (f.uniqueId.lastId += 1)
    };
    f.uniqueId.lastId = 0;
    f.policies = {
        options: {
            product: ['product', 'v3'],
            insertMode: ['insertMode', 'replace'],
            safeMode: ['safeMode', true],
            overlayButton: ['overlayButton', undefined]
        },
        attributes: {
            lang: ['lang', 'CN'],
            'class': ['className', 'FusionCharts']
        },
        width: ['width', '400'],
        height: ['height', '300'],
        src: ['swfUrl', ''],
        __state: {}
    };
    f.parsePolicies = function (a, b, c) {
        var d, policy, value;
        for (policy in b) {
            if (f.policies[policy] instanceof Array) {
                value = c[b[policy][0]];
                a[policy] = value === undefined ? b[policy][1] : value;
                continue
            }
            if (typeof a[policy] !== 'object') {
                a[policy] = {}
            }
            for (d in b[policy]) {
                value = c[b[policy][d][0]];
                a[policy][d] = value === undefined ? b[policy][d][1] : value
            }
        }
    };
    f.core = function (a) {
        if (!(this instanceof f.core)) {
            if (arguments.length === 1 && a instanceof Array && a[0] === 'private') {
                if (modules[a[1]] === true) {
                    return undefined
                }
                modules[a[1]] = true;
                return f
            }
            if (arguments.length === 1 && typeof a === 'string') {
                return f.core.items[a]
            }
            f.raiseError(this, '25081840', 'run', '', new SyntaxError("Use the \"new\" keyword while creating a new FusionCharts object"))
        }
        var b = {},
            prop;
        if (arguments.length === 1 && typeof arguments[0] === 'object') {
            b = arguments[0]
        } else {
            for (prop in argsT) {
                b[argsT[prop]] = arguments[prop]
            }
        }
        if (typeof arguments[arguments.length - 1] === 'object') {
            delete b[arguments.length - 1];
            f.extend(b, arguments[arguments.length - 1])
        }
        this.id = typeof b.id === 'undefined' ? this.id = f.uniqueId() : b.id;
        this.args = b;
        if (f.core.items[this.id] instanceof f.core) {
            this.id = f.uniqueId();
            f.raiseWarning(this, '06091847', 'param', '', 'A FusionChart oject with the specified id \"' + this.id + '\" already exists. Renaming it to ' + this.id)
        }
        f.parsePolicies(this, f.policies, b);
        this.resizeTo(b.width, b.height, true);
        f.raiseEvent('BeforeInitialize', b, this);
        f.core.items[this.id] = this;
        f.raiseEvent('Initialized', b, this);
        return this
    };
    f.core.prototype = {};
    f.core.prototype.constructor = f.core;
    f.extend({
        id: 'FusionCharts',
        version: [3, 2, 1, 'release', 1750],
        items: {},
        options: {},
        getObjectReference: function (a) {
            return f.core.items[a].ref
        }
    }, false);
    window.FusionCharts = f.core
}());
(function () {
    var f = FusionCharts(['private', 'EventManager']);
    if (f === undefined) {
        return
    }
    window.FusionChartsEvents = {
        BeforeInitialize: 'beforeinitialize',
        Initialized: 'initialized',
        Loaded: 'loaded',
        Rendered: 'rendered',
        DataLoadRequested: 'dataloadrequested',
        DataLoadRequestCancelled: 'dataloadrequestcancelled',
        DataLoadRequestCompleted: 'dataloadrequestcompleted',
        BeforeDataUpdate: 'beforedataupdate',
        DataUpdateCancelled: 'dataupdatecancelled',
        DataUpdated: 'dataupdated',
        DataLoadCancelled: 'dataloadcancelled',
        DataLoaded: 'dataloaded',
        DataLoadError: 'dataloaderror',
        NoDataToDisplay: 'nodatatodisplay',
        DataXMLInvalid: 'dataxmlinvalid',
        InvalidDataError: 'invaliddataerror',
        DrawComplete: 'drawcomplete',
        Resized: 'resized',
        BeforeDispose: 'beforedispose',
        Disposed: 'disposed'
    };
    var g = function (a, b, c, d) {
        try {
            a[0].call(b, c, d || {})
        } catch (e) {
            setTimeout(function () {
                throw e;
            }, 0)
        }
    };
    var h = function (a, b, c) {
        if (!(a instanceof Array)) {
            return
        }
        var i = 0,
            scope;
        for (; i < a.length; i += 1) {
            if (a[i][1] === b.sender || a[i][1] === undefined) {
                scope = a[i][1] === b.sender ? b.sender : f.core;
                g(a[i], scope, b, c)
            }
            if (b.cancel === true) {
                break
            }
        }
    };
    var j = {
        listeners: {},
        lastEventId: 0,
        addListener: function (a, b, c) {
            if (a instanceof Array) {
                for (var i = 0; i < a.length; i += 1) {
                    j.addListener(a[i], b, c)
                }
                return
            }
            if (typeof a !== 'string') {
                f.raiseError(this, '03091549', 'param', '::EventTarget.addListener', new Error('Unspecified Event Type'));
                return
            }
            if (typeof b !== 'function') {
                f.raiseError(this, '03091550', 'param', '::EventTarget.addListener', new Error('Invalid Event Listener'));
                return
            }
            a = a.toLowerCase();
            if (!(j.listeners[a] instanceof Array)) {
                j.listeners[a] = []
            }
            j.listeners[a].push([b, c])
        },
        removeListener: function (a, b, c) {
            var i;
            if (a instanceof Array) {
                for (i = 0; i < a.length; i += 1) {
                    j.removeListener(a[i], b, c)
                }
                return
            }
            if (typeof a !== 'string') {
                f.raiseError(this, '03091559', 'param', '::EventTarget.removeListener', new Error('Unspecified Event Type'));
                return
            }
            if (typeof b !== 'function') {
                f.raiseError(this, '03091560', 'param', '::EventTarget.removeListener', new Error('Invalid Event Listener'));
                return
            }
            a = a.toLowerCase();
            var d = j.listeners[a];
            if (!(d instanceof Array)) {
                return
            }
            for (i = 0; i < d.length; i += 1) {
                if (d[i][0] === b && d[i][1] === c) {
                    d.splice(i, 1);
                    i -= 1
                }
            }
        },
        triggerEvent: function (a, b, c) {
            if (typeof a !== 'string') {
                f.raiseError(this, '03091602', 'param', '::EventTarget.dispatchEvent', new Error('Invalid Event Type'));
                return undefined
            }
            a = a.toLowerCase();
            var d = {
                eventType: a,
                eventId: (j.lastEventId += 1),
                sender: (typeof b === 'string' ? f.core.items[b] : b),
                stopPropagation: function () {
                    return (this.cancel = true) === false
                }
            };
            h(j.listeners[a], d, c);
            h(j.listeners['*'], d, c);
            return true
        }
    };
    f.raiseEvent = function (a, b, c) {
        return j.triggerEvent(a, (c === undefined ? f.core : c), b)
    };
    f.addEventListener = function (a, b) {
        return j.addListener(a, b)
    };
    f.removeEventListener = function (a, b) {
        return j.removeListener(a, b)
    };
    f.extend({
        addEventListener: f.addEventListener,
        removeEventListener: f.removeEventListener
    }, false);
    f.extend({
        addEventListener: function (a, b) {
            return j.addListener(a, b, this)
        },
        removeEventListener: function (a, b) {
            return j.removeListener(a, b, this)
        }
    }, true);
    f.addEventListener('BeforeDispose', function (e) {
        var a, i;
        for (a in j.listeners) {
            for (i = 0; i < j.listeners[a].length; i += 1) {
                if (j.listeners[a][i][1] === e.sender) {
                    j.listeners[a].splice(i, 1)
                }
            }
        }
    })
}());
(function () {
    var i = FusionCharts(['private', 'ErrorHandler']);
    if (i === undefined) {
        return
    }
    var j = 'text';
    var k = {
        type: 'TypeException',
        range: 'ValueRangeException',
        impl: 'NotImplementedException',
        param: 'ParameterException',
        run: 'RuntimeException',
        comp: 'DesignTimeError',
        'undefined': 'UnspecifiedException'
    };
    var l = function (a, b, c, d, e, f) {
        var g = '#' + b + ' ' + a.id + d + ' ' + f + ' >> ';
        if (e instanceof Error) {
            e.name = k[c];
            e.module = 'FusionCharts' + d;
            e.level = f;
            e.message = g + e.message;
            g = e.message;
            window.setTimeout(function () {
                throw e;
            }, 0)
        } else {
            g = g + e
        }
        var h = {
            id: b,
            nature: k[c],
            source: 'FusionCharts' + d,
            message: g
        };
        i.raiseEvent(f, h, a);
        if (typeof window['FC_' + f] === 'function') {
            window['FC_' + f](h)
        }
    };
    i.raiseError = function (a, b, c, d, e) {
        l(a, b, c, d, e, 'Error')
    };
    i.raiseWarning = function (a, b, c, d, e) {
        l(a, b, c, d, e, 'Warning')
    };
    var m = {
        outputHelpers: {
            'text': function (e, a) {
                var b = (e.sender.id || e.sender).toString();
                m.outputTo('#' + e.eventId + ' [' + b + '] fired "' + e.eventType + '" event. ' + (e.eventType === 'error' || e.eventType === 'warning' ? a.message : ''))
            },
            'event': function (e, a) {
                this.outputTo(e, a)
            },
            'verbose': function (e, a) {
                m.outputTo(e.eventId, e.sender.id, e.eventType, a)
            }
        },
        outputHandler: function (e, a) {
            if (typeof m.outputTo !== 'function') {
                i.core.debugMode.outputFailed = true;
                return
            }
            i.core.debugMode.outputFailed = false;
            m.currentOutputHelper(e, a)
        },
        currentOutputHelper: undefined,
        outputTo: undefined,
        enabled: false
    };
    m.currentOutputHelper = m.outputHelpers[j];
    i.extend({
        debugMode: {
            outputFormat: function (a) {
                if (a && typeof a.toLowerCase === 'function' && typeof m.outputHelpers[a = a.toLowerCase()] === 'function') {
                    m.currentOutputHelper = m.outputHelpers[a];
                    return true
                }
                return false
            },
            outputTo: function (a) {
                if (typeof a === 'function') {
                    m.outputTo = a
                } else if (a === null) {
                    i.core.debugMode.enabled(false);
                    delete m.outputTo
                }
            },
            enabled: function (a, b, c) {
                if (typeof a === 'function') {
                    if (typeof b === 'string' && arguments.length === 2) {
                        c = b
                    }
                    b = a;
                    a = true
                }
                if (typeof a === 'boolean' && a !== m.enabled) {
                    i.core[(m.enabled = a) ? 'addEventListener' : 'removeEventListener']('*', m.outputHandler)
                }
                if (typeof b === 'function') {
                    m.outputTo = b
                }
                i.core.debugMode.outputFormat(c);
                return m.enabled
            },
            _enableFirebugLite: function (a) {
                if (window.console && window.console.firebug) {
                    i.core.debugMode.enabled(console.log, 'verbose');
                    return
                }
                var b = document.createElement('script');
                b.type = 'text/javascript';
                b.src = typeof a === 'string' ? a : i.core.options.scriptBaseUri + 'firebug-lite.js';
                b['\v' === 'v' ? 'text' : 'innerHTML'] = '{ startOpened: true }';
                b.onload = function () {
                    i.core.debugMode.enabled(console.log, 'verbose')
                };
                b.onreadystatechange = function () {
                    if (this.readyState === 'complete' || this.readyState === 'loaded') {
                        i.core.debugMode.enabled(console.log, 'verbose')
                    }
                };
                document.getElementsByTagName('head')[0].appendChild(b)
            }
        }
    }, false)
}());
(function () {
    var f = FusionCharts(['private', 'RendererManager']);
    if (f === undefined) {
        return
    }
    f.policies.options.containerElementId = ['renderAt', undefined];
    f.policies.options.renderer = ['renderer', undefined];
    var g = function () {
        f.raiseError(this, '25081845', 'run', '::RendererManager', new Error('No active renderer'));
        return
    };
    var h = {
        'undefined': {
            render: g,
            update: g,
            resize: g,
            config: g,
            policies: {}
        }
    },
        store = {};
    f.renderer = {
        register: function (a, b) {
            if (!a || typeof a.toString !== 'function') {
                throw "#03091436 ~renderer.register() Invalid value for renderer name.";
            }
            a = a.toString().toLowerCase();
            if (h[a] !== undefined) {
                f.raiseError(f.core, '03091438', 'param', '::RendererManager>register', 'Duplicate renderer name specified in "name"');
                return false
            }
            h[a] = b;
            return true
        },
        setDefault: function (a) {
            if (!a || typeof a.toString !== 'function') {
                f.raiseError(f.core, '25081731', 'param', '::RendererManager>setDefault', 'Invalid renderer name specified in "name"');
                return false
            }
            if (h[a = a.toString().toLowerCase()] === undefined) {
                f.raiseError(f.core, '25081733', 'range', '::RendererManager>setDefault', 'The specified renderer does not exist.');
                return false
            }
            f.policies.options.renderer = ['renderer', a];
            return true
        },
        getRenderer: function (a) {
            return h[a]
        },
        getRendererPolicy: function (a) {
            var b = h[a].policies;
            return typeof b === 'object' ? b : {}
        },
        currentRendererName: function () {
            return f.policies.options.renderer[1]
        },
        update: function (a) {
            store[a.id].update.apply(a, Array.prototype.slice.call(arguments, 1))
        },
        render: function (a) {
            store[a.id].render.apply(a, Array.prototype.slice.call(arguments, 1))
        },
        resize: function (a) {
            store[a.id].resize.apply(a, Array.prototype.slice.call(arguments, 1))
        },
        config: function (a) {
            store[a.id].config.apply(a, Array.prototype.slice.call(arguments, 1))
        }
    };
    var j = function (a) {
        return function () {
            if (this.ref === undefined || this.ref === null || typeof this.ref[a] !== 'function') {
                f.raiseError(this, '25081617', 'run', '~' + a + '()', 'ExternalInterface call failed. Check whether chart has been rendered.');
                return undefined
            }
            return this.ref[a].apply(this.ref, arguments)
        }
    };
    f.addEventListener('BeforeInitialize', function (a) {
        var b = a.sender;
        if (typeof b.options.renderer === 'string' && h[b.options.renderer.toLowerCase()] === undefined) {
            b.options.renderer = f.policies.options.renderer[1]
        }
        b.options.renderer = b.options.renderer.toLowerCase();
        store[b.id] = h[b.options.renderer];
        if (store[b.id].initialized !== true && typeof store[b.id].init === 'function') {
            store[b.id].init();
            store[b.id].initialized = true
        }
        f.parsePolicies(b, store[b.id].policies || {}, b.args);
        for (var c in store[b.id].prototype) {
            b[c] = store[b.id].prototype[c]
        }
    });
    f.addEventListener('Loaded', function (e) {
        var a = e.sender,
            chartObj = e.sender.ref;
        if (a instanceof f.core) {
            delete a.__state.rendering
        }
        if (chartObj === undefined || chartObj === null || typeof chartObj.getExternalInterfaceMethods !== 'function') {
            return
        }
        var b = chartObj.getExternalInterfaceMethods().split(','),
            i;
        for (i = 0; i < b.length; i += 1) {
            if (a[b[i]] === undefined) {
                a[b[i]] = j(b[i])
            }
        }
    });
    var k = function (a, b) {
        var c = document.getElementById(a),
            containerId = b.getAttribute('id');
        if (c === null) {
            return false
        }
        if (a === containerId) {
            return true
        }
        var d = b.getElementsByTagName('*');
        for (var i = 0; i < d.length; i += 1) {
            if (d[i] === c) {
                return false
            }
        }
        return true
    };
    var l = function (a) {
        if (a.success === false) {
            f.raiseError(f.core.items[a.id], '25081850', 'run', '::RendererManager', new Error('There was an error rendering the chart. ' + 'Enable FusionCharts JS debugMode for more information.'))
        }
        f.core.items[a.id].ref = a.ref;
        if (a.ref) {
            a.ref.FusionCharts = f.core.items[a.id]
        }
        f.raiseEvent('internal.DOMElementCreated', a, f.core.items[a.id])
    };
    f.extend({
        render: function (a) {
            if (window[this.id] !== undefined) {
                f.raiseError(this, '25081843', 'comp', '.render', new Error('#25081843:IECompatibility() Chart ' + 'Id is same as a JavaScript variable name. Variable naming ' + 'error. Please use unique name for chart JS variable, ' + 'chart-id and container id.'))
            }
            var b = document.createElement('span');
            if (a === undefined) {
                a = this.options.containerElementId
            }
            if (typeof a === 'string') {
                a = document.getElementById(a)
            }
            if (a === undefined || a === null) {
                f.raiseError(this, '03091456', 'run', '.render()', new Error("Unable to find the container DOM element."));
                return this
            }
            if (k(this.id, a)) {
                f.raiseError(this, '05102109', 'run', '.render()', new Error("A duplicate object already exists with the specific Id: " + this.id));
                return this
            }
            b.setAttribute('id', this.id);
            if (this.options.insertMode === 'replace') {
                while (a.hasChildNodes()) {
                    a.removeChild(a.firstChild)
                }
            }
            a.appendChild(b);
            this.options.containerElement = a;
            this.options.containerElementId = a.id;
            this.__state.rendering = true;
            f.renderer.render(this, a, l);
            return this
        },
        configure: function (b, c) {
            f.renderer.config(this, (typeof b === 'object') ? b : (function () {
                var a = {};
                a[b] = c;
                return a
            }()))
        }
    }, true);
    f.extend({
        setCurrentRenderer: f.renderer.setDefault,
        render: function () {
            var a = ['swfUrl', 'id', 'width', 'height', 'renderAt', 'dataSource', 'dataFormat'],
                params = {},
                i;
            if (arguments[0] instanceof f.core) {
                arguments[0].render();
                return arguments[0]
            }
            for (i = 0;
            (i < arguments.length && i < a.length); i += 1) {
                params[a[i]] = arguments[i]
            }
            if (typeof arguments[arguments.length - 1] === 'object') {
                delete params[a[i - 1]];
                f.extend(params, arguments[arguments.length - 1])
            }
            if (params.dataFormat === undefined) {
                params.dataFormat = FusionChartsDataFormats.XMLURL
            }
            return new f.core(params).render()
        }
    }, false)
}());
(function () {
    var g = FusionCharts(['private', 'DataHandlerManager']);
    if (g === undefined) {
        return
    }
    window.FusionChartsDataFormats = {};
    g.ajax = (function () {
        var c = function (a, x, e, b) {
            if (typeof a.error === 'function') {
                b[1] = x;
                Array.prototype.push.call(b, e);
                a.error.apply(a, b)
            }
        };
        var d = {
            x: window.XMLHttpRequest && (window.location.protocol !== "file:" || !window.ActiveXObject) ?
            function () {
                return new window.XMLHttpRequest()
            } : function () {
                try {
                    return new window.ActiveXObject("Microsoft.XMLHTTP")
                } catch (e) {
                    throw "Charts cannot render due to lack of AJAX support. Use setDataURL for fallback";
                }
            },
            get: function (u, f) {
                var x = d.x(),
                    args = arguments;
                x.onreadystatechange = function () {
                    try {
                        if (x.readyState === 4) {
                            if (x.status === 200 || x.status === 0) {
                                f(x.responseText, x)
                            } else {
                                c(d, x, new Error('XMLHttpRequest Error'), args)
                            }
                        }
                    } catch (e) {
                        c(d, x, e, args)
                    }
                };
                try {
                    if (x.overrideMimeType) {
                        x.overrideMimeType('text/plain')
                    }
                    x.open('GET', u, true);
                    x.setRequestHeader('If-Modified-Since', 'Sat, 29 Oct 1994 19:43:31 GMT');
                    x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
                    x.setRequestHeader('Accept', 'text/plain, */*');
                    x.send(null)
                } catch (e) {
                    c(d, x, e, args)
                }
                return x
            }
        };
        return d
    }());
    g.ajax.error = function (a, x, b, c, e) {
        var d = {
            source: b,
            url: a,
            xmlHttpRequestObject: x,
            error: e,
            httpStatus: (x && x.status) ? x.status : -1
        };
        g.raiseEvent('DataLoadError', d, c);
        if (typeof window.FC_DataLoadError === 'function') {
            window.FC_DataLoadError(c.id, d)
        }
    };
    var h = {},
        dataStore = {},
        xStore = {},
        cache = {},
        isUrl = /url$/i;
    var i = function (a) {
        if (xStore[a] && typeof xStore[a].abort === 'function' && xStore[a].readyState && xStore[a].readyState !== 0) {
            xStore[a].abort();
            return true
        }
        return false
    };
    g.policies.options.dataSource = ['dataSource', undefined];
    g.policies.options.dataFormat = ['dataFormat', undefined];
    g.addDataHandler = function (b, c) {
        if (typeof b !== 'string' || h[b.toLowerCase()] !== undefined) {
            g.raiseError(g.core, '03091606', 'param', '::DataManager.addDataHandler', new Error('Invalid Data Handler Name'));
            return
        }
        var d = {},
            lcaseName = b.toLowerCase();
        h[lcaseName] = c;
        d['set' + b + 'Url'] = function (a) {
            return this.setChartDataUrl(a, b)
        };
        d['set' + b + 'Data'] = function (a) {
            return this.setChartData(a, b)
        };
        d['get' + b + 'Data'] = function () {
            return this.getChartData(b)
        };
        window.FusionChartsDataFormats[b] = lcaseName;
        window.FusionChartsDataFormats[b + 'URL'] = lcaseName + 'URL';
        g.extend(d, true)
    };
    g.addEventListener('BeforeInitialize', function (a) {
        var b = a.sender;
        dataStore[b.id] = '';
        cache[b.id] = {};
        if (b.options.dataSource !== undefined && typeof b.options.dataFormat === 'string') {
            b.setChartData(b.options.dataSource, b.options.dataFormat)
        }
    });
    g.addEventListener('BeforeDispose', function (e) {
        delete dataStore[e.sender.id];
        delete cache[e.sender.id];
        i(e.sender.id)
    });
    g.extend({
        setChartDataUrl: function (c, d, e) {
            if (d === undefined || d === null || typeof d.toString !== 'function') {
                g.raiseError(g.core, '03091609', 'param', '.setChartDataUrl', new Error('Invalid Data Format'));
                return
            }
            d = d.toString().toLowerCase();
            var f, obj = this,
                cancelDLRFlag = false;
            if (isUrl.test(d)) {
                f = d.slice(0, -3)
            } else {
                f = d;
                d = d + 'url'
            }
            g.raiseEvent('DataLoadRequested', {
                source: 'XmlHttpRequest',
                url: c,
                dataFormat: f,
                cancelDataLoadRequest: function () {
                    cancelDLRFlag = true;
                    this.cancelDataLoadRequest = function () {
                        return false
                    };
                    return true
                }
            }, obj);
            if (cancelDLRFlag === true) {
                g.raiseEvent('DataLoadRequestCancelled', {
                    source: 'XmlHttpRequest',
                    url: c,
                    dataFormat: f
                }, obj);
                return
            }
            this.options.dataSource = c;
            xStore[this.id] = g.ajax.get(decodeURIComponent(c), function (a, x) {
                var b = false;
                g.raiseEvent('DataLoadRequestCompleted', {
                    source: 'XmlHttpRequest',
                    url: c,
                    data: a,
                    dataFormat: f,
                    cancelDataLoad: function () {
                        b = true;
                        this.cancelDataLoad = function () {
                            return false
                        };
                        return true
                    },
                    xmlHttpRequestObject: x
                }, obj);
                if (b !== true) {
                    obj.setChartData(a, f, e)
                } else {
                    g.raiseEvent('DataLoadCancelled', {
                        source: 'XmlHttpRequest',
                        url: c,
                        dataFormat: f,
                        xmlHttpRequestObject: x
                    }, obj)
                }
                delete xStore[this.id]
            }, 'XmlHttpRequest', this)
        },
        setChartData: function (a, b, c) {
            if (b === undefined || b === null || typeof b.toString !== 'function') {
                g.raiseError(g.core, '03091610', 'param', '.setChartData', new Error('Invalid Data Format'))
            }
            b = b.toString().toLowerCase();
            var d;
            if (isUrl.test(b)) {
                this.setChartDataUrl(a, b, c);
                return
            } else {
                this.options.dataSource = a;
                d = b
            }
            this.options.dataFormat = b;
            var e = h[d],
                parseResult, eventArgs, cancelDUFlag = false;
            if (typeof e === 'undefined') {
                g.raiseError(g.core, '03091611', 'param', '.setChartData', new Error('Data Format not recognized'));
                return
            }
            parseResult = e.encode(a, this);
            parseResult.format = d;
            eventArgs = {
                dataFormat: d,
                dataSource: a,
                dataError: parseResult.error,
                data: parseResult.data,
                cancelDataUpdate: function () {
                    cancelDUFlag = true;
                    this.cancelDataUpdate = function () {
                        return false
                    };
                    return true
                }
            };
            g.raiseEvent('BeforeDataUpdate', eventArgs, this);
            delete eventArgs.cancelDataUpdate;
            if (cancelDUFlag === true) {
                g.raiseEvent('DataUpdateCancelled', eventArgs, this);
                return
            }
            dataStore[this.id] = (parseResult.data = eventArgs.data) || '';
            cache[this.id] = {};
            if (c !== true) {
                if (this.options.safeMode === true && this.__state.rendering === true && !this.isActive()) {
                    this.__state.updatePending = parseResult;
                    g.raiseWarning(this, '23091255', 'run', '::DataHandler~update', 'Renderer update was postponed due to async loading.')
                } else {
                    delete this.__state.updatePending;
                    g.renderer.update(this, parseResult)
                }
            }
            g.raiseEvent('DataUpdated', eventArgs, this)
        },
        getChartData: function (a, b) {
            var c, parseResult;
            if (a === undefined || typeof a.toString !== 'function' || (c = h[a = a.toString().toLowerCase()]) === undefined) {
                g.raiseError(this, '25081543', 'param', '~getChartData()', new Error('Unrecognized data-format specified in "format"'));
                return undefined
            }
            parseResult = (typeof cache[this.id][a] === 'object') ? cache[this.id][a] : cache[this.id][a] = c.decode(dataStore[this.id], this);
            return Boolean(b) === true ? parseResult : parseResult.data
        }
    }, true);
    g.extend({
        transcodeData: function (a, b, c, d) {
            if (!b || typeof b.toString !== 'function' || !c || typeof c.toString !== 'function' || h[(c = c.toString().toLowerCase())] === undefined || h[(b = b.toString().toLowerCase())] === undefined) {
                g.raiseError(this, '14090217', 'param', 'transcodeData()', new Error('Unrecognized data-format specified during transcoding.'));
                return undefined
            }
            var e = h[b].encode(a, this),
                l2 = h[c].decode(e.data, this);
            if (!(l2.error instanceof Error)) {
                l2.error = e.error
            }
            return d ? l2 : l2.data
        }
    }, false);
    g.core.addEventListener('Disposed', function (e) {
        delete cache[e.sender.id]
    });
    g.core.addEventListener('Loaded', function (e) {
        var a = e.sender;
        if (a instanceof g.core && a.__state.updatePending !== undefined) {
            g.renderer.update(a, a.__state.updatePending);
            delete a.__state.updatePending
        }
    })
}());
(function () {
    var f = FusionCharts(['private', 'GenericRuntime']);
    if (f === undefined) {
        return
    }
    var g = /(fusioncharts\.js|fusioncharts\.debug\.js|fusioncharts\.core\.js|fusioncharts\.min\.js|fusioncharts\.packed\.js)(\?.*)?$/i;
    var j = {
        vled: 'realtimeverticalled'
    };
    f.core.options.scriptBaseUri = (function () {
        var a = document.getElementsByTagName('script'),
            l = a.length,
            scriptBaseUri = '',
            i;
        for (i = 0; i < l; i += 1) {
            if (g.test(a[i].getAttribute('src'))) {
                scriptBaseUri = a[i].getAttribute('src').split(g)[0];
                break
            }
        }
        return scriptBaseUri
    }());
    var k = function (a, b, c) {
        for (var d in a) {
            if (a[d] instanceof Array) {
                b[a[d][0]] = c[d];
                continue
            }
            for (var e in a[d]) {
                b[a[d][e][0]] = c[d][e]
            }
        }
    },
        lengthCleanupRegex = /[^\%\d]*$/g,
        signatureMatchRegex = /^FusionCharts/;
    f.extend({
        dispose: function () {
            f.raiseEvent('BeforeDispose', {}, this);
            delete f.core.items[this.id];
            f.raiseEvent('Disposed', {}, this)
        },
        clone: function (a, b) {
            var c = f.extend({}, this.args);
            k(f.policies, c, this);
            k(f.renderer.getRendererPolicy(this.options.renderer), c, this);
            delete c.id;
            delete c.animate;
            delete c.stallLoad;
            if (typeof a === 'object') {
                f.extend(c, a)
            }
            return b ? c : new f.core(c)
        },
        setDataXML: function (a) {
            if (a === undefined || a === null || typeof a.toString !== 'function') {
                f.raiseError(this, '25081627', 'param', '~setDataXML', 'Invalid data type for parameter "xml"');
                return
            }
            if (this.ref === undefined || this.ref === null || typeof this.ref.setDataXML !== 'function') {
                this.setChartData(a.toString(), FusionChartsDataFormats.XML)
            } else {
                this.ref.setDataXML(a.toString())
            }
        },
        setDataURL: function (a) {
            if (a === undefined || a === null || typeof a.toString !== 'function') {
                f.raiseError(this, '25081724', 'param', '~setDataURL', 'Invalid data type for parameter "url"');
                return
            }
            if (this.ref === undefined || this.ref === null || typeof this.ref.setDataURL !== 'function') {
                this.setChartData(a.toString(), FusionChartsDataFormats.XMLURL)
            } else {
                this.ref.setDataURL(a.toString())
            }
        },
        isActive: function () {
            if (!this.ref || document.getElementById(this.id) !== this.ref || typeof this.ref.signature !== 'function') {
                return false
            }
            try {
                return signatureMatchRegex.test(this.ref.signature())
            } catch (e) {
                return false
            }
        },
        resizeTo: function (w, h, a) {
            var b = {
                width: w,
                height: h
            };
            if (typeof arguments[0] === 'object') {
                b.width = arguments[0].width;
                b.height = arguments[0].height;
                a = h
            }
            if (b.width && typeof b.width.toString === 'function') {
                this.width = b.width.toString().replace(lengthCleanupRegex, '')
            }
            if (b.height && typeof b.height.toString === 'function') {
                this.height = b.height.toString().replace(lengthCleanupRegex, '')
            }
            if (a !== true) {
                f.renderer.resize(this, b)
            }
        },
        chartType: function () {
            var a = this.src.substring(this.src.indexOf('.swf'), 0),
                file = a.substring(a.lastIndexOf('/') + 1).toLowerCase();
            return j[file] === undefined ? file : j[file]
        }
    }, true);
    window.getChartFromId = function (a) {
        return f.core.items[a] instanceof f.core ? f.core.items[a].ref : f.swfobject.getObjectById(a)
    };
    var m = function (a, b) {
        if (typeof a[b] === 'function') {
            return function () {
                return a[b].apply(a, arguments)
            }
        }
        return a[b]
    };
    f.addEventListener('internal.DOMElementCreated', function (a, b) {
        if (b.ref === undefined || b.success !== true) {
            return
        }
        var c = {
            options: true,
            vars: true,
            attributes: true,
            params: true,
            src: true,
            ref: true,
            constructor: true,
            setDataXML: true,
            setDataURL: true,
            hasRendered: true,
            getXML: true,
            getDataAsCSV: true,
            print: true,
            exportChart: true,
            signature: true,
            link: true
        };
        for (var d in a.sender) {
            if (c[d] === true || b.ref[d] !== undefined) {
                continue
            }
            try {
                b.ref[d] = m(a.sender, d)
            } catch (e) {}
        }
    })
}());
(function () {
    var d = FusionCharts(['private', 'DynamicChartAttributes']);
    if (d === undefined) {
        return
    }
    d.extend({
        setChartAttribute: function (a) {
            if (arguments.length > 1 && typeof a === 'string') {
                var b = arguments[0];
                a = {};
                a[b] = arguments[1]
            } else if (a === null || typeof a !== 'object') {
                return
            }
            var i = 0,
                json = this.getChartData(FusionChartsDataFormats.JSON),
                prop, attList = json.chart || json.graph || {};
            for (prop in a) {
                i += 1;
                attList[prop.toLowerCase()] = a[prop]
            }
            if (i > 0) {
                if (typeof attList.animation === 'undefined') {
                    attList.animation = '0'
                }
                this.setChartData(json, FusionChartsDataFormats.JSON)
            }
        },
        getChartAttribute: function (a) {
            var b = (b = this.getChartData(FusionChartsDataFormats.JSON)).chart || b.graph;
            if (arguments.length === 0 || a === undefined || b === undefined) {
                return b
            }
            var c, i;
            if (typeof a === 'string') {
                c = b[a.toString().toLowerCase()]
            } else if (a instanceof Array) {
                c = {};
                for (i = 0; i < a.length; i += 1) {
                    c[a[i]] = b[a[i].toString().toLowerCase()]
                }
            } else {
                d.raiseError(this, '25081429', 'param', '~getChartAttribute()', 'Unexpected value of "attribute"')
            }
            return c
        }
    }, true)
}());
(function () {
    var y = FusionCharts(['private', 'Flash_Renderer']);
    if (y === undefined) {
        return
    }
    var z = y.swfobject = function () {
        var w = "undefined",
            OBJECT = "object",
            SHOCKWAVE_FLASH = "Shockwave Flash",
            SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
            FLASH_MIME_TYPE = "application/x-shockwave-flash",
            EXPRESS_INSTALL_ID = "SWFObjectExprInst",
            ON_READY_STATE_CHANGE = "onreadystatechange",
            win = window,
            doc = document,
            nav = navigator,
            plugin = false,
            domLoadFnArr = [main],
            regObjArr = [],
            objIdArr = [],
            listenersArr = [],
            storedAltContent, storedAltContentId, storedCallbackFn, storedCallbackObj, isDomLoaded = false,
            isExpressInstallActive = false,
            dynamicStylesheet, dynamicStylesheetMedia, autoHideShow = true,
            ua = function () {
                var b = typeof doc.getElementById != w && typeof doc.getElementsByTagName != w && typeof doc.createElement != w,
                    u = nav.userAgent.toLowerCase(),
                    p = nav.platform.toLowerCase(),
                    windows = p ? /win/.test(p) : /win/.test(u),
                    mac = p ? /mac/.test(p) : /mac/.test(u),
                    webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false,
                    ie = !+"\v1",
                    playerVersion = [0, 0, 0],
                    d = null;
                if (typeof nav.plugins != w && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
                    d = nav.plugins[SHOCKWAVE_FLASH].description;
                    if (d && !(typeof nav.mimeTypes != w && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) {
                        plugin = true;
                        ie = false;
                        d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
                        playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
                        playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
                        playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0
                    }
                } else if (typeof win.ActiveXObject != w) {
                    try {
                        var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
                        if (a) {
                            try {
                                d = a.GetVariable("$version")
                            } catch (e) {}
                            if (d) {
                                ie = true;
                                d = d.split(" ")[1].split(",");
                                playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]
                            }
                        }
                    } catch (e) {}
                }
                return {
                    w3: b,
                    pv: playerVersion,
                    wk: webkit,
                    ie: ie,
                    win: windows,
                    mac: mac
                }
            }(),
            onDomLoad = function () {
                if (!ua.w3) {
                    return
                }
                if ((typeof doc.readyState != w && doc.readyState == "complete") || (typeof doc.readyState == w && (doc.getElementsByTagName("body")[0] || doc.body))) {
                    callDomLoadFunctions()
                }
                if (!isDomLoaded) {
                    if (typeof doc.addEventListener != w) {
                        doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false)
                    }
                    if (ua.ie && ua.win) {
                        doc.attachEvent(ON_READY_STATE_CHANGE, function () {
                            if (doc.readyState == "complete") {
                                doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee);
                                callDomLoadFunctions()
                            }
                        });
                        if (win == top) {
                            (function () {
                                if (isDomLoaded) {
                                    return
                                }
                                try {
                                    doc.documentElement.doScroll("left")
                                } catch (e) {
                                    setTimeout(arguments.callee, 0);
                                    return
                                }
                                callDomLoadFunctions()
                            })()
                        }
                    }
                    if (ua.wk) {
                        (function () {
                            if (isDomLoaded) {
                                return
                            }
                            if (!/loaded|complete/.test(doc.readyState)) {
                                setTimeout(arguments.callee, 0);
                                return
                            }
                            callDomLoadFunctions()
                        })()
                    }
                    addLoadEvent(callDomLoadFunctions)
                }
            }();

        function callDomLoadFunctions() {
            if (isDomLoaded) {
                return
            }
            try {
                var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span"));
                t.parentNode.removeChild(t)
            } catch (e) {
                return
            }
            isDomLoaded = true;
            var a = domLoadFnArr.length;
            for (var i = 0; i < a; i++) {
                domLoadFnArr[i]()
            }
        }
        function addDomLoadEvent(a) {
            if (isDomLoaded) {
                a()
            } else {
                domLoadFnArr[domLoadFnArr.length] = a
            }
        }
        function addLoadEvent(a) {
            if (typeof win.addEventListener != w) {
                win.addEventListener("load", a, false)
            } else if (typeof doc.addEventListener != w) {
                doc.addEventListener("load", a, false)
            } else if (typeof win.attachEvent != w) {
                addListener(win, "onload", a)
            } else if (typeof win.onload == "function") {
                var b = win.onload;
                win.onload = function () {
                    b();
                    a()
                }
            } else {
                win.onload = a
            }
        }
        function main() {
            if (plugin) {
                testPlayerVersion()
            } else {
                matchVersions()
            }
        }
        function testPlayerVersion() {
            var b = doc.getElementsByTagName("body")[0];
            var o = createElement(OBJECT);
            o.setAttribute("type", FLASH_MIME_TYPE);
            var t = b.appendChild(o);
            if (t) {
                var a = 0;
                (function () {
                    if (typeof t.GetVariable != w) {
                        var d;
                        try {
                            d = t.GetVariable("$version")
                        } catch (e) {}
                        if (d) {
                            d = d.split(" ")[1].split(",");
                            ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]
                        }
                    } else if (a < 10) {
                        a++;
                        setTimeout(arguments.callee, 10);
                        return
                    }
                    b.removeChild(o);
                    t = null;
                    matchVersions()
                })()
            } else {
                matchVersions()
            }
        }
        function matchVersions() {
            var a = regObjArr.length;
            if (a > 0) {
                for (var i = 0; i < a; i++) {
                    var b = regObjArr[i].id;
                    var c = regObjArr[i].callbackFn;
                    var d = {
                        success: false,
                        id: b
                    };
                    if (ua.pv[0] > 0) {
                        var e = getElementById(b);
                        if (e) {
                            if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) {
                                setVisibility(b, true);
                                if (c) {
                                    d.success = true;
                                    d.ref = getObjectById(b);
                                    c(d)
                                }
                            } else if (regObjArr[i].expressInstall && canExpressInstall()) {
                                var f = {};
                                f.data = regObjArr[i].expressInstall;
                                f.width = e.getAttribute("width") || "0";
                                f.height = e.getAttribute("height") || "0";
                                if (e.getAttribute("class")) {
                                    f.styleclass = e.getAttribute("class")
                                }
                                if (e.getAttribute("align")) {
                                    f.align = e.getAttribute("align")
                                }
                                var g = {};
                                var p = e.getElementsByTagName("param");
                                var h = p.length;
                                for (var j = 0; j < h; j++) {
                                    if (p[j].getAttribute("name").toLowerCase() != "movie") {
                                        g[p[j].getAttribute("name")] = p[j].getAttribute("value")
                                    }
                                }
                                showExpressInstall(f, g, b, c)
                            } else {
                                displayAltContent(e);
                                if (c) {
                                    c(d)
                                }
                            }
                        }
                    } else {
                        setVisibility(b, true);
                        if (c) {
                            var o = getObjectById(b);
                            if (o && typeof o.SetVariable != w) {
                                d.success = true;
                                d.ref = o
                            }
                            c(d)
                        }
                    }
                }
            }
        }
        function getObjectById(a) {
            var r = null;
            var o = getElementById(a);
            if (o && o.nodeName == "OBJECT") {
                if (typeof o.SetVariable != w) {
                    r = o
                } else {
                    var n = o.getElementsByTagName(OBJECT)[0];
                    if (n) {
                        r = n
                    }
                }
            }
            return r
        }
        function canExpressInstall() {
            return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312)
        }
        function showExpressInstall(a, b, c, d) {
            isExpressInstallActive = true;
            storedCallbackFn = d || null;
            storedCallbackObj = {
                success: false,
                id: c
            };
            var e = getElementById(c);
            if (e) {
                if (e.nodeName == "OBJECT") {
                    storedAltContent = abstractAltContent(e);
                    storedAltContentId = null
                } else {
                    storedAltContent = e;
                    storedAltContentId = c
                }
                a.id = EXPRESS_INSTALL_ID;
                if (typeof a.width == w || (!/%$/.test(a.width) && parseInt(a.width, 10) < 310)) {
                    a.width = "310"
                }
                if (typeof a.height == w || (!/%$/.test(a.height) && parseInt(a.height, 10) < 137)) {
                    a.height = "137"
                }
                doc.title = doc.title.slice(0, 47) + " - Flash Player Installation";
                var f = ua.ie && ua.win ? "ActiveX" : "PlugIn",
                    fv = "MMredirectURL=" + win.location.toString().replace(/&/g, "%26") + "&MMplayerType=" + f + "&MMdoctitle=" + doc.title;
                if (typeof b.flashvars != w) {
                    b.flashvars += "&" + fv
                } else {
                    b.flashvars = fv
                }
                if (ua.ie && ua.win && e.readyState != 4) {
                    var g = createElement("div");
                    c += "SWFObjectNew";
                    g.setAttribute("id", c);
                    e.parentNode.insertBefore(g, e);
                    e.style.display = "none";
                    (function () {
                        if (e.readyState == 4) {
                            e.parentNode.removeChild(e)
                        } else {
                            setTimeout(arguments.callee, 10)
                        }
                    })()
                }
                createSWF(a, b, c)
            }
        }
        function displayAltContent(a) {
            if (ua.ie && ua.win && a.readyState != 4) {
                var b = createElement("div");
                a.parentNode.insertBefore(b, a);
                b.parentNode.replaceChild(abstractAltContent(a), b);
                a.style.display = "none";
                (function () {
                    if (a.readyState == 4) {
                        a.parentNode.removeChild(a)
                    } else {
                        setTimeout(arguments.callee, 10)
                    }
                })()
            } else {
                a.parentNode.replaceChild(abstractAltContent(a), a)
            }
        }
        function abstractAltContent(a) {
            var b = createElement("div");
            if (ua.win && ua.ie) {
                b.innerHTML = a.innerHTML
            } else {
                var d = a.getElementsByTagName(OBJECT)[0];
                if (d) {
                    var c = d.childNodes;
                    if (c) {
                        var e = c.length;
                        for (var i = 0; i < e; i++) {
                            if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) {
                                b.appendChild(c[i].cloneNode(true))
                            }
                        }
                    }
                }
            }
            return b
        }
        function createSWF(a, b, c) {
            var r, el = getElementById(c);
            if (ua.wk && ua.wk < 312) {
                return r
            }
            if (el) {
                if (typeof a.id == w) {
                    a.id = c
                }
                if (ua.ie && ua.win) {
                    var d = "";
                    for (var i in a) {
                        if (a[i] != Object.prototype[i]) {
                            if (i.toLowerCase() == "data") {
                                b.movie = a[i]
                            } else if (i.toLowerCase() == "styleclass") {
                                d += ' class="' + a[i] + '"'
                            } else if (i.toLowerCase() != "classid") {
                                d += ' ' + i + '="' + a[i] + '"'
                            }
                        }
                    }
                    var e = "";
                    for (var j in b) {
                        if (b[j] != Object.prototype[j]) {
                            e += '<param name="' + j + '" value="' + b[j] + '" />'
                        }
                    }
                    el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + d + '>' + e + '</object>';
                    objIdArr[objIdArr.length] = a.id;
                    r = getElementById(a.id)
                } else {
                    var o = createElement(OBJECT);
                    o.setAttribute("type", FLASH_MIME_TYPE);
                    for (var m in a) {
                        if (a[m] != Object.prototype[m]) {
                            if (m.toLowerCase() == "styleclass") {
                                o.setAttribute("class", a[m])
                            } else if (m.toLowerCase() != "classid") {
                                o.setAttribute(m, a[m])
                            }
                        }
                    }
                    for (var n in b) {
                        if (b[n] != Object.prototype[n] && n.toLowerCase() != "movie") {
                            createObjParam(o, n, b[n])
                        }
                    }
                    el.parentNode.replaceChild(o, el);
                    r = o
                }
            }
            return r
        }
        function createObjParam(a, b, c) {
            var p = createElement("param");
            p.setAttribute("name", b);
            p.setAttribute("value", c);
            a.appendChild(p)
        }
        function removeSWF(a) {
            var b = getElementById(a);
            if (b && b.nodeName == "OBJECT") {
                if (ua.ie && ua.win) {
                    b.style.display = "none";
                    (function () {
                        if (b.readyState == 4) {
                            removeObjectInIE(a)
                        } else {
                            setTimeout(arguments.callee, 10)
                        }
                    })()
                } else {
                    b.parentNode.removeChild(b)
                }
            }
        }
        function removeObjectInIE(a) {
            var b = getElementById(a);
            if (b) {
                for (var i in b) {
                    if (typeof b[i] == "function") {
                        b[i] = null
                    }
                }
                b.parentNode.removeChild(b)
            }
        }
        function getElementById(a) {
            var b = null;
            try {
                b = doc.getElementById(a)
            } catch (e) {}
            return b
        }
        function createElement(a) {
            return doc.createElement(a)
        }
        function addListener(a, b, c) {
            a.attachEvent(b, c);
            listenersArr[listenersArr.length] = [a, b, c]
        }
        function hasPlayerVersion(a) {
            var b = ua.pv,
                v = a.split(".");
            v[0] = parseInt(v[0], 10);
            v[1] = parseInt(v[1], 10) || 0;
            v[2] = parseInt(v[2], 10) || 0;
            return (b[0] > v[0] || (b[0] == v[0] && b[1] > v[1]) || (b[0] == v[0] && b[1] == v[1] && b[2] >= v[2])) ? true : false
        }
        function createCSS(a, b, c, d) {
            if (ua.ie && ua.mac) {
                return
            }
            var h = doc.getElementsByTagName("head")[0];
            if (!h) {
                return
            }
            var m = (c && typeof c == "string") ? c : "screen";
            if (d) {
                dynamicStylesheet = null;
                dynamicStylesheetMedia = null
            }
            if (!dynamicStylesheet || dynamicStylesheetMedia != m) {
                var s = createElement("style");
                s.setAttribute("type", "text/css");
                s.setAttribute("media", m);
                dynamicStylesheet = h.appendChild(s);
                if (ua.ie && ua.win && typeof doc.styleSheets != w && doc.styleSheets.length > 0) {
                    dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1]
                }
                dynamicStylesheetMedia = m
            }
            if (ua.ie && ua.win) {
                if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) {
                    dynamicStylesheet.addRule(a, b)
                }
            } else {
                if (dynamicStylesheet && typeof doc.createTextNode != w) {
                    dynamicStylesheet.appendChild(doc.createTextNode(a + " {" + b + "}"))
                }
            }
        }
        function setVisibility(a, b) {
            if (!autoHideShow) {
                return
            }
            var v = b ? "visible" : "hidden";
            if (isDomLoaded && getElementById(a)) {
                getElementById(a).style.visibility = v
            } else {
                createCSS("#" + a, "visibility:" + v)
            }
        }
        function C(s) {
            var a = /[\\\"<>\.;]/;
            var b = a.exec(s) != null;
            return b && typeof encodeURIComponent != w ? encodeURIComponent(s) : s
        }
        var x = function () {
            if (ua.ie && ua.win) {
                window.attachEvent("onunload", function () {
                    var a = listenersArr.length;
                    for (var i = 0; i < a; i++) {
                        listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2])
                    }
                    var b = objIdArr.length;
                    for (var j = 0; j < b; j++) {
                        removeSWF(objIdArr[j])
                    }
                    for (var k in ua) {
                        ua[k] = null
                    }
                    ua = null;
                    for (var l in z) {
                        z[l] = null
                    }
                    z = null
                })
            }
        }();
        return {
            registerObject: function (a, b, c, d) {
                if (ua.w3 && a && b) {
                    var e = {};
                    e.id = a;
                    e.swfVersion = b;
                    e.expressInstall = c;
                    e.callbackFn = d;
                    regObjArr[regObjArr.length] = e;
                    setVisibility(a, false)
                } else if (d) {
                    d({
                        success: false,
                        id: a
                    })
                }
            },
            getObjectById: function (a) {
                if (ua.w3) {
                    return getObjectById(a)
                }
            },
            embedSWF: function (d, e, f, g, h, l, m, n, o, p) {
                var q = {
                    success: false,
                    id: e
                };
                if (ua.w3 && !(ua.wk && ua.wk < 312) && d && e && f && g && h) {
                    setVisibility(e, false);
                    addDomLoadEvent(function () {
                        f += "";
                        g += "";
                        var a = {};
                        if (o && typeof o === OBJECT) {
                            for (var i in o) {
                                a[i] = o[i]
                            }
                        }
                        a.data = d;
                        a.width = f;
                        a.height = g;
                        var b = {};
                        if (n && typeof n === OBJECT) {
                            for (var j in n) {
                                b[j] = n[j]
                            }
                        }
                        if (m && typeof m === OBJECT) {
                            for (var k in m) {
                                if (typeof b.flashvars != w) {
                                    b.flashvars += "&" + k + "=" + m[k]
                                } else {
                                    b.flashvars = k + "=" + m[k]
                                }
                            }
                        }
                        if (hasPlayerVersion(h)) {
                            var c = createSWF(a, b, e);
                            if (a.id == e) {
                                setVisibility(e, true)
                            }
                            q.success = true;
                            q.ref = c
                        } else if (l && canExpressInstall()) {
                            a.data = l;
                            showExpressInstall(a, b, e, p);
                            return
                        } else {
                            setVisibility(e, true)
                        }
                        if (p) {
                            p(q)
                        }
                    })
                } else if (p) {
                    p(q)
                }
            },
            switchOffAutoHideShow: function () {
                autoHideShow = false
            },
            ua: ua,
            getFlashPlayerVersion: function () {
                return {
                    major: ua.pv[0],
                    minor: ua.pv[1],
                    release: ua.pv[2]
                }
            },
            hasFlashPlayerVersion: hasPlayerVersion,
            createSWF: function (a, b, c) {
                if (ua.w3) {
                    return createSWF(a, b, c)
                } else {
                    return undefined
                }
            },
            showExpressInstall: function (a, b, c, d) {
                if (ua.w3 && canExpressInstall()) {
                    showExpressInstall(a, b, c, d)
                }
            },
            removeSWF: function (a) {
                if (ua.w3) {
                    removeSWF(a)
                }
            },
            createCSS: function (a, b, c, d) {
                if (ua.w3) {
                    createCSS(a, b, c, d)
                }
            },
            addDomLoadEvent: addDomLoadEvent,
            addLoadEvent: addLoadEvent,
            getQueryParamValue: function (a) {
                var q = doc.location.search || doc.location.hash;
                if (q) {
                    if (/\?/.test(q)) {
                        q = q.split("?")[1]
                    }
                    if (a == null) {
                        return C(q)
                    }
                    var b = q.split("&");
                    for (var i = 0; i < b.length; i++) {
                        if (b[i].substring(0, b[i].indexOf("=")) == a) {
                            return C(b[i].substring((b[i].indexOf("=") + 1)))
                        }
                    }
                }
                return ""
            },
            expressInstallCallback: function () {
                if (isExpressInstallActive) {
                    var a = getElementById(EXPRESS_INSTALL_ID);
                    if (a && storedAltContent) {
                        a.parentNode.replaceChild(storedAltContent, a);
                        if (storedAltContentId) {
                            setVisibility(storedAltContentId, true);
                            if (ua.ie && ua.win) {
                                storedAltContent.style.display = "block"
                            }
                        }
                        if (storedCallbackFn) {
                            storedCallbackFn(storedCallbackObj)
                        }
                    }
                    isExpressInstallActive = false
                }
            }
        }
    }();
    y.core.options.requiredFlashPlayerVersion = '8';
    y.core.options.installRedirectMessage = 'You need Adobe Flash ' + 'Player 8 (or above) to view the charts on this page. It is a free, ' + 'lightweight and safe installation from Adobe Systems Incorporated.' + '\n\nWould you like to go to Adobe\'s website and install Flash Player?';
    var A = false;
    var B = /[\\\"<>;]/;
    var C = function (s) {
        return (B.exec(s) !== null) && typeof window.encodeURIComponent !== undefined ? window.encodeURIComponent(s) : s
    };
    var D = function (e, a) {
        if (a && a.source === 'XmlHttpRequest') {
            return
        }
        var b = e.sender;
        if (b.ref && typeof b.ref.dataInvokedOnSWF === 'function' && b.ref.dataInvokedOnSWF() && typeof b.ref.getXML === 'function') {
            y.raiseWarning(b, '08300116', 'run', '::DataHandler~__fusioncharts_vars', 'Data was set in UTF unsafe manner');
            b.setChartData(window.unescape(e.sender.ref.getXML({
                escaped: true
            })), FusionChartsDataFormats.XML, true);
            b.flashVars.dataXML = b.getChartData(FusionChartsDataFormats.XML);
            delete b.flashVars.dataURL
        }
        e.sender.removeEventListener('DataLoaded', D)
    };
    window.__fusioncharts_dimension = (function () {
        var c = /.*?\%\s*?$/g;
        return function (a) {
            var b, parent;
            return !((b = y.core(a)) instanceof y.core && b.ref && (parent = b.ref.parentNode)) ? {} : {
                width: parent.offsetWidth * (c.test(b.width) ? parseInt(b.width, 10) / 100 : 1),
                height: parent.offsetHeight * (c.test(b.height) ? parseInt(b.height, 10) / 100 : 1)
            }
        }
    }());
    window.__fusioncharts_vars = function (a, b) {
        var c = y.core.items[a];
        if (!(c instanceof y.core)) {
            y.raiseError(y.core, '25081621', 'run', '::FlashRenderer', 'FusionCharts Flash object is accessing flashVars of non-existent object.');
            return false
        }
        if (typeof b === 'object') {
            if (c.ref && typeof c.ref.dataInvokedOnSWF === 'function' && c.ref.dataInvokedOnSWF()) {
                if (b.dataURL !== undefined) {
                    c.addEventListener('DataLoaded', D)
                } else if (b.dataXML !== undefined) {
                    b.dataXML = window.unescape(b.dataXML)
                }
            } else {
                delete b.dataURL;
                delete b.dataXML
            }
            y.extend(c.flashVars, b);
            return true
        }
        return c.flashVars
    };
    y.addEventListener('BeforeInitialize', function (a) {
        var b = a.sender;
        if (b.options.renderer !== 'flash') {
            return
        }
        if (b.width === undefined) {
            b.width = y.renderer.policies.flashVars.chartWidth[1]
        }
        if (b.height === undefined) {
            b.height = y.renderer.policies.flashVars.chartHeight[1]
        }
        if (b.flashVars.DOMId === undefined) {
            b.flashVars.DOMId = b.id
        }
        y.extend(b.flashVars, {
            registerWithJS: '1',
            chartWidth: b.width,
            chartHeight: b.height,
            InvalidXMLText: 'Invalid data.'
        });
        if (Boolean(b.options.autoInstallRedirect) === true && !y.swfobject.hasFlashPlayerVersion(y.core.options.requiredFlashPlayerVersion.toString()) && A === false) {
            A = true;
            if (window.confirm(y.core.options.installRedirectMessage)) {
                window.location.href = 'http://get.adobe.com/flashplayer/'
            }
        }
        if (b.options.dataFormat === undefined && b.options.dataSource === undefined) {
            b.options.dataFormat = FusionChartsDataFormats.XMLURL;
            b.options.dataSource = 'Data.xml'
        }
    });
    y.addEventListener('Disposed', function (e) {
        if (e.sender.options.renderer !== 'flash') {
            return
        }
        y.swfobject.removeSWF(e.sender.id)
    });
    y.addEventListener('Loaded', function (e) {
        if (e.sender.options.renderer !== 'flash') {
            return
        }
        e.sender.flashVars.animation = '0'
    });
    y.addEventListener('DataLoadRequested', function (a, b) {
        var c = a.sender;
        if (c.options.renderer !== 'flash') {
            return
        }
        if (window.location.protocol === 'file:' && b.dataFormat === FusionChartsDataFormats.XML && Boolean(c.options.safeMode) === true) {
            if (c.ref && c.ref.setDataURL) {
                c.ref.setDataURL(b.url, false)
            } else {
                c.flashVars.dataURL = b.url
            }
            a.stopPropagation();
            b.cancelDataLoadRequest();
            c.addEventListener('DataLoaded', D)
        }
        if (c.ref && typeof c.showChartMessage === 'function') {
            delete c.flashVars.stallLoad;
            c.ref.showChartMessage('XMLLoadingText')
        } else {
            c.flashVars.stallLoad = true
        }
    });
    y.addEventListener('DataLoadRequestCancelled', function (a) {
        var b = a.sender;
        if (b.options.renderer !== 'flash') {
            return
        }
        if (b.ref && typeof b.showChartMessage === 'function') {
            b.ref.showChartMessage()
        }
        delete b.flashVars.stallLoad
    });
    y.addEventListener('DataLoadError', function (a, b) {
        var c = a.sender;
        if (c.options.renderer !== 'flash') {
            return
        }
        if (c.ref && typeof c.ref.showChartMessage === 'function' && b.source === 'XmlHttpRequest') {
            c.ref.showChartMessage('LoadDataErrorText')
        } else {
            delete c.flashVars.dataURL;
            c.flashVars.dataXML = '<JSON parsing error>';
            delete c.flashVars.stallLoad
        }
    });
    y.addEventListener('DataLoadRequestCompleted', function (a, b) {
        var c = a.sender;
        if (c.options.renderer !== 'flash' || b.source !== 'XmlHttpRequest') {
            return
        }
        delete c.flashVars.stallLoad
    });
    window.__fusioncharts_event = function (a, b) {
        setTimeout(function () {
            y.raiseEvent(a.type, b, y.core.items[a.sender])
        }, 0)
    };
    var E = {
        dataFormat: 'xml',
        init: function () {},
        policies: {
            params: {
                scaleMode: ['scaleMode', 'noScale'],
                scale: ['scaleMode', 'noScale'],
                wMode: ['wMode', 'opaque'],
                menu: ['menu', undefined],
                bgColor: ['bgColor', undefined],
                allowScriptAccess: ['allowScriptAccess', 'always'],
                quality: ['quality', 'best'],
                swLiveConnect: ['swLiveConnect', undefined],
                base: ['base', undefined],
                align: ['align', undefined],
                salign: ['sAlign', undefined]
            },
            flashVars: {
                lang: ['lang', 'CN'],
                debugMode: ['debugMode', undefined],
                animation: ['animate', undefined]
            },
            options: {
                autoInstallRedirect: ['autoInstallRedirect', false]
            }
        },
        render: function (a, b) {
            if (Boolean(this.flashVars.animation) === true) {
                delete this.flashVars.animation
            }
            if (!this.src) {
                y.raiseError(this, '03102348', 'run', '::FlashRenderer.render', 'Could not find a valid "src" attribute. swfUrl or chart ' + 'type missing.')
            }
            var c = {},
                dataXML = this.flashVars.dataXML,
                dataURL = this.flashVars.dataURL;
            y.extend(c, this.flashVars);
            if (this.flashVars.stallLoad === true) {
                if (this.options.dataFormat === FusionChartsDataFormats.XML) {
                    dataXML = this.options.dataSource
                }
                if (this.options.dataFormat === FusionChartsDataFormats.XMLURL) {
                    dataURL = this.options.dataSource
                }
            }
            c.dataXML = window.encodeURIComponent(dataXML || '');
            c.dataURL = C(dataURL || '');
            y.swfobject.embedSWF(this.src, this.id, this.width, this.height, '8.0.0', undefined, c, this.params, this.attributes, b)
        },
        update: function (a) {
            var b = this.ref,
                data = a.data;
            this.flashVars.dataXML = data;
            if (a.error === undefined) {
                if (this.isActive() && typeof b.setDataXML === 'function') {
                    b.setDataXML(data, false)
                } else {
                    delete this.flashVars.dataURL;
                    delete this.flashVars.animation
                }
            } else {
                if (this.isActive() && typeof b.showChartMessage === 'function') {
                    b.showChartMessage('InvalidXMLText')
                } else {
                    this.flashVars.dataXML = '<Invalid' + a.format.toUpperCase() + '>';
                    delete this.flashVars.dataURL;
                    delete this.flashVars.animation
                }
            }
        },
        resize: function () {
            this.flashVars.chartWidth = this.width;
            this.flashVars.chartHeight = this.height;
            if (this.ref !== undefined) {
                this.ref.width = this.width;
                this.ref.height = this.height;
                if (typeof this.ref.resize === 'function') {
                    this.ref.resize(this.ref.offsetWidth, this.ref.offsetHeight)
                }
            }
        },
        config: function (a) {
            y.extend(this.flashVars, a)
        }
    };
    E.prototype = {
        getSWFHTML: function () {
            var a = document.createElement('span'),
                inElm = document.createElement('span'),
                tempId = 'RnVzaW9uQ2hhcnRz' + (new Date()).getTime();
            a.appendChild(inElm);
            inElm.setAttribute('id', tempId);
            a.style.display = 'none';
            document.getElementsByTagName('body')[0].appendChild(a);
            y.swfobject.embedSWF(this.src, tempId, this.width, this.height, '8.0.0', undefined, this.flashVars, this.params, this.attrs);
            var b = a.innerHTML.replace(tempId, this.id);
            y.swfobject.removeSWF(tempId);
            a.parentNode.removeChild(a);
            return b
        },
        setTransparent: function (a) {
            if (typeof a !== 'boolean' && a !== null) {
                a = true
            }
            this.params.wMode = a === null ? 'window' : (a === true ? 'transparent' : 'opaque')
        },
        addVariable: y.core.prototype.configure
    };
    y.renderer.register('flash', E);
    if (!/\(iPhone;|\(iPad;/i.test(navigator.userAgent)) {
        y.renderer.setDefault('flash')
    }
}());
(function () {
    var M, FCC = {},
        baseURL = 'JSClass/',
        covertToFCC, renderArray = [],
        FCCready = false,
        i, scriptTags, jsConf = {};
    M = FusionCharts(['private', 'Canvas_Renderer']);
    if (M === undefined) {
        return
    }
    var N = true;

    function noEffect() {
        return undefined
    }
    FCC.init = function () {
        var m = function (c, d, e) {
            return function (a, b) {
                b.style[c] = (e ? e : '') + a + (d ? d : '')
            }
        },
            FCFCC = {
                color: ["AFD8F8", "F6BD0F", "8BBA00", "FF8E46", "008E8E", "D64646", "8E468E", "588526", "B3AA00", "008ED6", "9D080D", "A186BE", "CC6600", "FDC689", "ABA000", "F26D7D", "FFF200", "0054A6", "F7941C", "CC3300", "006600", "663300", "6DCFF6"],
                seriesName: {
                    'Column2D': 1,
                    'Column3D': 1,
                    'Line': 1,
                    'Area2D': 1,
                    'Bar2D': 1,
                    'Pie2D': 1,
                    'Pie3D': 1,
                    'Doughnut2D': 1,
                    'Doughnut3D': 1,
                    'Pareto2D': 1.5,
                    'Pareto3D': 1.5,
                    'MSColumn2D': 2,
                    'MSColumn3D': 2,
                    'MSLine': 2,
                    'ZoomLine': 2.5,
                    'MSBar2D': 2,
                    'MSBar3D': 2,
                    'MSArea': 2,
                    'InverseMSLine': 2.2,
                    'InverseMSColumn2D': 2.2,
                    'InverseMSArea': 2.2,
                    'StackedColumn3D': 3,
                    'Marimekko': 3,
                    'StackedColumn2D': 3,
                    'StackedColumn2DLine': 3,
                    'StackedColumn3DLine': 3,
                    'StackedBar2D': 3,
                    'StackedBar3D': 3,
                    'StackedArea2D': 3,
                    'MSCombi3D': 4,
                    'MSCombi2D': 4,
                    'MSCombiDY2D': 5,
                    'MSColumnLine3D': 4,
                    'MSColumn3DLineDY': 5,
                    'MSStackedColumn2D': 6,
                    'MSStackedColumn2DLineDY': 6.5,
                    'StackedColumn3DLineDY': 5.5,
                    'Scatter': 7,
                    'Bubble': 7.5,
                    'ScrollColumn2D': 2,
                    'ScrollLine2D': 2,
                    'ScrollArea2D': 2,
                    'ScrollStackedColumn2D': 3,
                    'ScrollCombi2D': 4,
                    'ScrollCombiDY2D': 5,
                    'SSGrid': 9,
                    'Spline': 1,
                    'SplineArea': 1,
                    'MSSpline': 2,
                    'MSSplineArea': 2,
                    'MultiAxisLine': 8
                },
                highCharts: {
                    'Column2D': 'column',
                    'Column3D': 'column',
                    'Line': 'line',
                    'Area2D': 'area',
                    'Bar2D': 'bar',
                    'Pie2D': 'pie',
                    'Pie3D': 'pie',
                    'Doughnut2D': 'pie',
                    'Doughnut3D': 'pie',
                    'Pareto2D': 'column',
                    'Pareto3D': 'column',
                    'MSColumn2D': 'column',
                    'MSColumn3D': 'column',
                    'MSLine': 'line',
                    'ZoomLine': 'line',
                    'MSBar2D': 'bar',
                    'MSBar3D': 'bar',
                    'MSArea': 'area',
                    'InverseMSLine': 'line',
                    'InverseMSColumn2D': 'column',
                    'InverseMSArea': 'area',
                    'StackedColumn3D': 'column',
                    'StackedColumn2D': 'column',
                    'Marimekko': 'column',
                    'StackedColumn2DLine': 'column',
                    'StackedColumn3DLine': 'column',
                    'StackedBar2D': 'bar',
                    'StackedBar3D': 'bar',
                    'StackedArea2D': 'area',
                    'MSCombi3D': 'column',
                    'MSCombi2D': 'column',
                    'MSCombiDY2D': 'column',
                    'MSColumnLine3D': 'column',
                    'MSColumn3DLineDY': 'column',
                    'MSStackedColumn2D': '',
                    'MSStackedColumn2DLineDY': '',
                    'StackedColumn3DLineDY': 'column',
                    'Scatter': 'scatter',
                    'Bubble': 'scatter',
                    'ScrollColumn2D': 'column',
                    'ScrollLine2D': 'line',
                    'ScrollArea2D': 'area',
                    'ScrollStackedColumn2D': 'column',
                    'ScrollCombi2D': 'column',
                    'ScrollCombiDY2D': 'column',
                    'SSGrid': '',
                    'Spline': 'spline',
                    'SplineArea': 'areaspline',
                    'MSSpline': 'spline',
                    'MSSplineArea': 'areaspline',
                    'MultiAxisLine': ''
                },
                combi: {
                    'column2d': 'column',
                    'column3d': 'column',
                    'line': 'line',
                    'area': 'area'
                },
                valueAbs: {
                    'Pie2D': true,
                    'Pie3D': true,
                    'Doughnut2D': true,
                    'Doughnut3D': true,
                    'Marimekko': true
                },
                exportFormat: {
                    png: 'image/png',
                    jpg: 'image/jpeg',
                    pdf: 'application/pdf',
                    svg: 'image/svg+xml'
                },
                JSONconf: {
                    blankChart: {
                        chart: {
                            events: {},
                            margin: [0, 0, 0, 0]
                        },
                        credits: {
                            href: 'http://www.fusioncharts.com?BS=FCHSEvalMark',
                            text: 'FusionCharts - HighCharts',
                            enabled: N
                        },
                        legend: {
                            enabled: false
                        },
                        title: {
                            text: 'No data to display',
                            style: {
                                fontFamily: 'Verdana',
                                fontSize: '10px',
                                color: '#666666'
                            }
                        },
                        plotOptions: {
                            series: {}
                        },
                        exporting: {
                            enabled: false
                        }
                    }
                },
                commonMethodCSV: 'saveAsImage,print,exportChart,getXML,getChartAttribute,getDataAsCSV,hasRendered,signature,cancelExport',
                methodCSV: {
                    'pie3d': ',togglePieSlice',
                    'pie2d': ',togglePieSlice',
                    'doughnut2D': ',togglePieSlice',
                    'doughnut3D': ',togglePieSlice',
                    'mscombi3d': ',view2D,view3D,resetView,rotateView,getViewAngles,fitToStage',
                    'zoomline': ',zoomTo,setZoomMode,zoomOut,resetChart'
                },
                method: {
                    getExternalInterfaceMethods: function (a) {
                        return FCFCC.commonMethodCSV + (FCFCC.methodCSV[a || this.FusionCharts.chartType()] || '')
                    },
                    print: function () {
                        var a = this.id;
                        FCC.items[a].FCCObj.FCC.print()
                    },
                    exportChart: function (a) {
                        var b = this.id,
                            HCConf = {},
                            HCObj = FCC.items[b].FCCObj.FCC;
                        if (HCObj.options.exporting.enabled) {
                            if (typeof a === 'object') {
                                for (var x in a) {
                                    if (x.toLowerCase() === 'exportformat' && FCFCC.exportFormat[a[x].toLowerCase()]) {
                                        HCConf.type = FCFCC.exportFormat[a[x].toLowerCase()]
                                    } else if (x.toLowerCase() === 'exportfilename') {
                                        HCConf.filename = a[x]
                                    }
                                }
                            }
                            HCObj.exportChart(HCConf)
                        }
                    },
                    getXML: function () {
                        var a = this.id;
                        return M.core.items[a].getXMLData()
                    },
                    signature: function () {
                        return 'FusionCharts/3.2.0/JS'
                    },
                    hasRendered: function () {
                        var a = this.id;
                        if (typeof FCC.items[a] === 'object') {
                            return true
                        } else {
                            return false
                        }
                    },
                    togglePieSlice: function (a) {
                        if (this.ref && this.ref.FCC && this.ref.FCC.series && this.ref.FCC.series[0] && this.ref.FCC.series[0].data && this.ref.FCC.series[0].data[a] && this.ref.FCC.series[0].data[a].slice()) {
                            this.ref.FCC.series[0].data[a].slice()
                        }
                    }
                },
                supportedStyle: {
                    font: function (c, d, e) {
                        var f, x, map = {
                            font: m('font-family'),
                            size: m('font-size', 'px'),
                            color: m('color', undefined, '#'),
                            align: function (a, b) {
                                b.align = a
                            },
                            bgColor: m('background-color', undefined, '#'),
                            borderColor: m('border-color', undefined, '#'),
                            isHTML: '',
                            leftMargin: m('margin-left', 'px'),
                            letterSpacing: m('letter-spacing', 'px'),
                            bold: function (a, b) {
                                b['font-weight'] = a == '1' ? 'bold' : 'normal'
                            },
                            italic: function (a, b) {
                                b['font-style'] = a == '1' ? 'italic' : 'normal'
                            },
                            underline: function (a, b) {
                                b['text-decoration'] = a == '1' ? 'underline' : 'normal'
                            }
                        };
                        switch (d) {
                        case 'caption':
                            f = c.title;
                            break;
                        case 'datalabels':
                            f = c.xAxis.labels;
                            break;
                        case 'datavalues':
                            f = c.plotOptions.series.dataLabels;
                            break;
                        case 'subcaption':
                            f = c.subtitle;
                            break;
                        case 'tooltip':
                            f = c.tooltip;
                            break;
                        case 'trendvalues':
                            f = undefined;
                            break;
                        case 'xaxisname':
                            f = c.xAxis.title;
                            break;
                        case 'yaxisname':
                            f = c.yAxis[0].title;
                            break;
                        case 'yaxisvalues':
                            f = c.yAxis[0].labels;
                            break;
                        default:
                            break
                        }
                        if (typeof f === 'object') {
                            for (x in e) {
                                if (typeof map[x] === 'function') {
                                    map[x](e[x], f)
                                }
                            }
                        }
                    }
                }
            };
        var n = {};

        function margeClone(a, b) {
            var c;
            if (typeof a !== 'object' && typeof b !== 'object') {
                return null
            }
            if (typeof a !== 'object') {
                a = {}
            }
            if (typeof b !== 'object') {
                b = a;
                a = {}
            }
            if (b instanceof Array) {
                for (c = 0; c < b.length; c += 1) {
                    if (typeof b[c] !== 'object') {
                        a[c] = b[c]
                    } else {
                        a[c] = margeClone(a[c], b[c])
                    }
                }
            } else {
                for (c in b) {
                    if (typeof b[c] !== 'object') {
                        a[c] = b[c]
                    } else {
                        a[c] = margeClone(a[c], b[c])
                    }
                }
            }
            return a
        }
        FCC.prototype = {
            setTransparent: function (a) {
                if (!this.jsVars) {
                    this.jsVars = {}
                }
                if (typeof a !== 'boolean' && a !== null) {
                    a = true
                }
                this.jsVars.transparent = a;
                if (typeof jQuery === 'function') {
                    jQuery('#' + this.id).css('background-color', (a === true) ? '' : '#FFFFFF')
                }
            },
            getSWFHTML: noEffect,
            _overrideJSChartConfiguration: function (a) {
                jsConf[this.id] = a
            }
        };
        if (M.core.options && M.core.options.scriptBaseUri !== undefined) {
            baseURL = M.core.options.scriptBaseUri
        } else {
            scriptTags = document.getElementsByTagName('script');
            if (scriptTags) {
                for (i = 0; i < scriptTags.length; i += 1) {
                    if (scriptTags[i].src.indexOf('FusionCharts.js') !== -1) {
                        baseURL = scriptTags[i].src.split("FusionCharts.js")[0]
                    }
                }
            }
        }
        FCC.isReady = function () {
            return FCCready
        };
        FCC.items = {};

        function loadScript(a) {
            var b = document.createElement('script');
            b.setAttribute('type', 'text/javascript');
            b.setAttribute('src', a);
            var c = document.getElementsByTagName('head');
            c[0].appendChild(b)
        }
        function checkFCCReady() {
            var a;
            if (typeof window.Highcharts === 'object') {
                FCCready = true;
                if (typeof FCC.render == 'function') {
                    while (renderArray.length > 0) {
                        a = renderArray.splice(0, 1)[0];
                        FCC.render.call(a[0], a[1], a[2])
                    }
                }
            } else {
                setTimeout(checkFCCReady, 300)
            }
        }
        function loadFCC() {
            if (typeof jQuery === 'function') {
                jQuery.noConflict();
                if ($ === undefined) {
                    $ = jQuery
                }
                if (typeof window.Highcharts !== 'object') {
                    loadScript(baseURL + 'highcharts.js');
                    setTimeout(checkFCCReady, 300)
                } else {
                    checkFCCReady()
                }
            } else {
                setTimeout(loadFCC, 300)
            }
        }
        if (typeof jQuery !== 'function') {
            loadScript(baseURL + 'jquery.min.js');
            setTimeout(loadFCC, 300)
        } else {
            loadFCC()
        }
        var o = function (a, b, c, d, e, f) {
            var g, minPowerOfTen, powerOfTen, y_interval, rangePowerOfTen, rangeInterval, y_topBound, y_lowerBound, yMaxGiven, yMinGiven, yMax, yMin, range, interval;
            a = (typeof a !== 'number') ? 0.1 : a;
            b = (typeof b !== 'number') ? 0 : b;
            if ((a === b) && (a === 0)) {
                a = 0.1
            }
            if (typeof e === 'undefined' || typeof e === 'null' || e === '') {
                e = false
            }
            if (typeof f === 'undefined' || typeof f === 'null' || f === '') {
                f = true
            }
            g = Math.floor(Math.log(Math.abs(a)) / Math.LN10);
            minPowerOfTen = Math.floor(Math.log(Math.abs(b)) / Math.LN10);
            powerOfTen = Math.max(minPowerOfTen, g);
            y_interval = Math.pow(10, powerOfTen);
            if (Math.abs(a) / y_interval < 2 && Math.abs(b) / y_interval < 2) {
                powerOfTen -= 1;
                y_interval = Math.pow(10, powerOfTen)
            }
            rangePowerOfTen = Math.floor(Math.log(a - b) / Math.LN10);
            rangeInterval = Math.pow(10, rangePowerOfTen);
            if (((a - b) > 0) && ((y_interval / rangeInterval) >= 10)) {
                y_interval = rangeInterval;
                powerOfTen = rangePowerOfTen
            }
            y_topBound = (Math.floor(a / y_interval) + 1) * y_interval;
            if (b < 0) {
                y_lowerBound = -1 * ((Math.floor(Math.abs(b / y_interval)) + 1) * y_interval)
            } else {
                if (f) {
                    y_lowerBound = 0
                } else {
                    y_lowerBound = Math.floor(Math.abs(b / y_interval) - 1) * y_interval;
                    y_lowerBound = (y_lowerBound < 0) ? 0 : y_lowerBound
                }
            }
            if (e && a <= 0) {
                y_topBound = 0
            }
            if (c === null || c === undefined || c === "") {
                yMaxGiven = false
            } else {
                yMaxGiven = true
            }
            if (d === null || d === undefined || d === "" || typeof Number(d) === 'NaN') {
                yMinGiven = false
            } else {
                yMinGiven = true
            }
            if (yMaxGiven === false || (yMaxGiven === true && Number(c) < a)) {
                yMax = y_topBound
            } else {
                yMax = Number(c)
            }
            if (yMinGiven === false || (yMinGiven === true && Number(d) > b)) {
                yMin = y_lowerBound
            } else {
                yMin = Number(d)
            }
            range = Math.abs(yMax - yMin);
            interval = y_interval;
            return {
                Max: yMax,
                Min: yMin,
                Range: range,
                interval: interval
            }
        };

        function createContainer(a, b, c, d, e) {
            var f = document.getElementById(b),
                __container = document.getElementById(a),
                lengthPercentageRegExp = /\%\s*?$/ig;
            if (e === true) {
                if (f) {
                    __container.removeChild(f)
                }
                f = document.createElement('div');
                f.setAttribute('id', b);
                __container.appendChild(f)
            }
            for (var x in this.attributes) {
                f[x] = this.attributes[x]
            }
            if (this.attributes['class']) {
                f.className = this.attributes['class']
            }
            f.setAttribute('style', 'display: inline-block; zoom: 1; *display: inline;');
            f.style.width = c + (c.match(lengthPercentageRegExp) ? '' : 'px');
            f.style.height = d + (d.match(lengthPercentageRegExp) ? '' : 'px')
        }
        function removeChart(a, b) {
            if (FCC.items[a]) {
                if (FCC.items[a].FCCObj && FCC.items[a].FCCObj.FCC) {
                    FCC.items[a].FCCObj.FCC.destroy()
                }
                clearTimeout(FCC.items[a].timeChach);
                if (b === true) {
                    var c = FCC.items[a].FCCObj;
                    if (c && c.parentNode) {
                        c.parentNode.removeChild(c)
                    }
                }
                delete FCC.items[a]
            }
        }
        function createSeries(a, b, c, d, e, f, g, h, i) {
            return {
                data: [],
                FCtype: a,
                color: b,
                type: c,
                name: d ? d : ' ',
                yAxis: e ? 1 : undefined,
                showvalue: f,
                lineColor: g,
                lineWidth: h,
                marker: i
            }
        }
        function parseStr(a) {
            if (typeof a === 'string') {
                return a.replace(/\{br\}/ig, '<br/>')
            } else {
                return ''
            }
        }
        function createMsg(a, b, c) {
            var d = FCFCC.JSONconf.blankChart;
            d.title.y = parseInt(document.getElementById(a).offsetHeight, 10) / 2;
            d.chart.renderTo = a;
            d.title.text = n[a][b] ? n[a][b] : b;
            if (typeof c === 'string') {
                M.raiseEvent(c, {}, M.core.items[a])
            }
            return d
        }
        function showChartMessage(a) {
            var b = this.id,
                HCJson, FC = M.core.items[b];
            if (FC.ref) {
                n[b].msgTxt = a;
                FC.ref.FCC.destroy();
                HCJson = createMsg(b, 'msgTxt', undefined);
                FC.ref.FCC = new Highcharts.Chart(HCJson);
                FCC.items[b].baseObj = HCJson
            }
            if (FC.link.root === FC) {
                return
            }
            var c = M.extend({
                show: true
            }, this.FusionCharts.link.parent.options.overlayButton);
            M.extend(c, this.FusionCharts.link.parent.link.configuration().overlayButton || {});
            this.drawOverlayButton(c)
        }
        function drawOverlayButton(b) {
            if (b.show) {
                var c = document.createElement('span');
                c.innerHTML = b.message ? b.message : "Back";
                c.style.border = '1px solid #' + (b.borderColor ? b.borderColor : "7f8975");
                c.style.backgroundColor = '#' + (b.bgColor ? b.bgColor : "edefec");
                c.style.fontFamily = b.font ? b.font : "Verdana";
                c.style.color = '#' + b.fontColor ? b.fontColor : "49563a";
                c.style.fontSize = (b.fontSize ? b.fontSize : '10') + 'px';
                c.style.padding = (b.padding ? b.padding : '3') + 'px';
                c.style.fontWeight = parseInt(b.bold, 10) === 0 ? 'normal' : 'bold';
                c.style.position = 'absolute';
                c.style.top = '1px';
                c.style.right = '1px';
                c.style._cursor = 'hand';
                c.style.cursor = 'pointer';
                c.onclick = (function (a) {
                    return function () {
                        M.raiseEvent('OverlayButtonClick', {}, a.FusionCharts)
                    }
                }(this));
                document.getElementById(this.id).childNodes[0].appendChild(c)
            }
        }
        function getSeriesName(a) {
            return FCFCC.seriesName[a]
        }
        function convertColor(a, b, c) {
            var R = 0,
                G = 0,
                B = 0,
                colorStr, tempArr;
            if (c && c.match(/^rgba/ig)) {
                tempArr = c.split(',');
                R = tempArr[0].slice(tempArr[3].indexOf('(') + 1);
                G = tempArr[1];
                B = tempArr[2];
                if (!b) {
                    b = parseInt(tempArr[3].slice(0, tempArr[3].indexOf(')')), 10) * 100
                }
            }
            if (a) {
                colorStr = a.replace(/[#\s]/ig, '').split(',')[0];
                switch (colorStr.length) {
                case 3:
                    colorStr = colorStr[0] + colorStr[0] + colorStr[1] + colorStr[1] + colorStr[2] + colorStr[2];
                    break;
                case 6:
                    break;
                default:
                    colorStr = (colorStr + 'FFFFFF').slice(0, 6);
                    break
                }
                R = parseInt(colorStr.slice(0, 2), 16);
                G = parseInt(colorStr.slice(2, 4), 16);
                B = parseInt(colorStr.slice(4, 6), 16)
            }
            if (!b) {
                b = 100
            }
            if (typeof b === 'string') {
                b = b.split(',')[0]
            }
            b = parseInt(b, 10) / 100;
            return 'rgba(' + R + ',' + G + ',' + B + ',' + b + ')'
        }
        var p = function (x, y, a, b, c) {
            x = x ? x : 0;
            y = y ? y : 0;
            a = (typeof a !== 'undefined') ? a : 400;
            b = (typeof b !== 'undefined') ? b : 400;
            c = (typeof c !== 'undefined') ? c : 0;
            var d, x2, y1, y2, tan, temp;
            tan = Math.tan((c * Math.PI) / 180);
            y1 = Math.round(b / 2 - ((a / 2) * tan));
            d = Math.round(a / 2 - ((b / 2) / tan));
            d = (d < 0) ? 0 : d;
            d = (d > a) ? a : d;
            y1 = (y1 < 0) ? 0 : y1;
            y1 = (y1 > b) ? b : y1;
            x2 = a - d;
            y2 = b - y1;
            if (c > 90 && c <= 270) {
                temp = y1;
                y1 = y2;
                y2 = temp
            }
            if (c > 180 && c <= 360) {
                temp = d;
                d = x2;
                x2 = temp
            }
            return [d + x, y1 + y, x2 + x, y2 + y]
        };
        var q = function (a, b, c) {
            var x, first, count = 0,
                blendAt, rgb, alpha, colorStop = [];
            b = b ? b.split(",") : undefined;
            c = c ? c.split(",") : undefined;
            a = a.split(",");
            first = (typeof c === 'object') ? c[0] : undefined;
            for (x = 0; x < a.length; x += 1) {
                rgb = a[x];
                blendAt = c ? c[x] : undefined;
                alpha = b ? b[x] : 100;
                alpha = alpha ? alpha : 100;
                if (!blendAt) {
                    first = 1;
                    blendAt = (x !== 0) ? ((100 - count) / (a.length - x)) : 0
                }
                if (first) {
                    count += parseInt(blendAt, 10)
                } else {
                    count = parseInt(blendAt, 10)
                }
                if (count >= 100) {
                    colorStop.push([1, convertColor(rgb, alpha)]);
                    break
                } else {
                    colorStop.push([count / 100, convertColor(rgb, alpha)])
                }
            }
            return colorStop
        };
        var r = function (x, y, a, b, c, d, e, f) {
            var g = {};
            g.linearGradient = p(x, y, a, b, c);
            g.stops = q(d, e, f);
            if ('\v' === 'v') {
                if (2 * g.linearGradient[0] > a) {
                    g.stops.reverse();
                    for (var i = 0; i < g.stops.length; i += 1) {
                        g.stops[i][0] = 1 - g.stops[i][0]
                    }
                }
                if (g.stops[g.stops.length - 1][0] !== 1) {
                    g.stops.push([1, g.stops[g.stops.length - 1][1]])
                }
                if (g.stops[0][0] !== 0) {
                    g.stops.splice(0, 0, [0, g.stops[0][1]])
                }
            }
            return g
        };
        var s = function (a) {
            return FCFCC.highCharts[a]
        };
        var t = function (a) {
            var x, psum = 0,
                pareto = {
                    yAxis: 1,
                    data: [],
                    type: 'line',
                    color: 'rgba(00,00,00,1)',
                    FCtype: 1.5
                },
                sum = 0;
            if (a instanceof Array) {
                for (x = 0; x < a.length; x += 1) {
                    sum += a[x].y
                }
                for (x = 0; x < a.length; x += 1) {
                    psum += a[x].y;
                    pareto.data.push({
                        y: Math.round((psum / sum) * 10000) / 100
                    })
                }
            }
            return pareto
        };
        var u = function (a) {
            var b = a.substring(a.indexOf('.swf'), 0);
            return b.substring(b.lastIndexOf('/') + 1)
        };
        var v = function (a, b, d) {
            d = d === undefined ? 1 : d;
            var e = {
                formatnumber: 1,
                formatnumberscale: 1,
                defaultnumberscale: '',
                numberscaleunit: 'K,M',
                numberscalevalue: '1000,1000',
                numberprefix: "",
                numbersuffix: "",
                decimalseparator: ".",
                thousandseparator: ",",
                indecimalseparator: "",
                inthousandseparator: "",
                decimals: "",
                forcedecimals: "0",
                yaxisvaluedecimals: "",
                sformatnumber: "1",
                sformatnumberscale: "0",
                sdefaultnumberscale: "",
                snumberscaleunit: "K,M",
                snumberscalevalue: "1000,1000",
                snumberprefix: "",
                snumbersuffix: "",
                sdecimals: "",
                sforcedecimals: "0",
                syaxisvaluedecimals: "0"
            };
            var f, numberScaleUnit, result, i, res, power, formatedNum = '',
                c = 0,
                initialVal, decimalVal, splitVal, decimalLength, last;
            for (i in b) {
                e[i.toLowerCase()] = b[i]
            }
            a = e.indecimalseparator !== '' ? a.toString().replace(e.indecimalseparator, '.') : a;
            a = e.inthousandseparator !== '' ? a.toString().replace(e.inthousandseparator, '') : a;
            if (d !== 1) {
                e.formatnumber = e.sformatnumber;
                e.formatnumberscale = e.sformatnumberscale;
                e.defaultnumberscale = e.sdefaultnumberscale;
                e.numberscaleunit = e.snumberscaleunit;
                e.numberscalevalue = e.snumberscalevalue;
                e.numberprefix = e.snumberprefix;
                e.numbersuffix = e.snumbersuffix;
                e.decimals = e.sdecimals;
                e.forcedecimals = e.sforcedecimals;
                e.yaxisvaluedecimals = e.syaxisvaluedecimals
            }
            f = e.numberscalevalue.split(',');
            numberScaleUnit = e.numberscaleunit.split(',');
            result = res = a.toString();
            if (e.formatnumber == 1) {
                if (res.indexOf('.') !== -1) {
                    splitVal = res.split('.');
                    initialVal = splitVal[0];
                    decimalVal = '.' + splitVal[1]
                } else {
                    initialVal = res;
                    decimalVal = ''
                }
                for (i = initialVal.length; i > 0; i -= 1) {
                    if (c % 3 === 0 && c !== 0) {
                        formatedNum = e.thousandseparator + formatedNum;
                        c = 0
                    }
                    formatedNum = res.charAt(i - 1) + formatedNum;
                    c += 1
                }
                result = (splitVal === undefined) || (decimalVal === 0) ? formatedNum : formatedNum + decimalVal
            }
            if (e.formatnumberscale == 1) {
                res = a;
                for (i = 0; i < f.length && res / f[i] >= 1; i += 1) {
                    res = res / f[i]
                }
                i -= 1;
                if (e.decimals === '') {
                    e.decimals = '2'
                }
                power = Math.pow(10, e.decimals);
                result = (i === -1) ? Math.round(res * power) / power : Math.round(res * power) / power
            }
            if (e.forcedecimals == 1) {
                if (result.toString().indexOf(e.decimalseparator) !== -1) {
                    decimalVal = result.toString().split(e.decimalseparator)[1];
                    decimalLength = decimalVal.length
                } else {
                    decimalLength = 0
                }
                if (decimalLength === 0) {
                    result += e.decimalseparator
                }
                if (decimalLength > e.decimals) {
                    if (e.decimals == 1 && decimalVal[0] >= 5) {
                        last = result[result.substring(0, result.indexOf('.')).length - 1];
                        last += 1;
                        result = result.substring(0, (result.indexOf('.') - 1)) + last;
                        result = result + '.' + '0'
                    } else if (decimalVal[e.decimals - 1] >= 5) {
                        last = decimalVal[e.decimals] >= 5 ? (parseInt(decimalVal[e.decimals - 1], 10) + 1) : decimalVal[e.decimals - 1];
                        decimalVal = decimalVal.substring(0, e.decimals - 1) + last;
                        result = result.substring(0, result.indexOf('.')) + '.' + decimalVal
                    }
                } else {
                    while (decimalLength < e.decimals) {
                        result += '0';
                        decimalLength += 1
                    }
                }
            }
            if (e.formatnumberscale == 1) {
                result += (i === -1) ? e.defaultnumberscale : numberScaleUnit[i]
            }
            result = e.numberprefix + result + e.numbersuffix;
            if (e.decimalseparator !== "." && e.decimalseparator !== "") {
                result = result.toString().replace('.', e.decimalseparator)
            }
            return result
        };
        var w = function (a) {
            var x = 'circle';
            switch (a) {
            case 3:
                x = 'triangle';
                break;
            case 4:
                x = 'diamond';
                break;
            default:
                x = 'square';
                break
            }
            if (isNaN(a)) {
                x = 'circle'
            }
            return x
        };
        var A;
        var C = function (a, b) {
            var c = '',
                arr, chartId, sender;
            if ((a === 2 && this.link) || (a === 1 && this.options.chart.link)) {
                if (a === 2 && this.link) {
                    c = b == '0' ? this.link : window.decodeURIComponent(this.link);
                    c.replace(/^[\s]*/, '');
                    arr = this.link.split('-');
                    chartId = this.options.id;
                    sender = M.core.items[chartId]
                } else if (a === 1 && this.options.chart.link) {
                    c = b == '0' ? this.options.chart.link : window.decodeURIComponent(this.options.chart.link);
                    c.replace(/^[ ]*/, '');
                    arr = this.options.chart.link.split('-');
                    chartId = this.options.chart.renderTo;
                    sender = M.core.items[chartId]
                }
                switch (arr[0].toLowerCase()) {
                case 'n':
                    window.open(arr[1]);
                    break;
                case 'f':
                    if (frames[arr[1]]) {
                        frames[arr[1]].location = arr[2]
                    } else {
                        window.open(arr[2], arr[1])
                    }
                    break;
                case 'j':
                    try {
                        window[arr[1]](arr[2])
                    } catch (er) {}
                    break;
                case 'p':
                    A = window.open(arr[2], arr[1].match(/[^,]+/i), arr[1].replace(/[^,]+,/i, ''));
                    if (window.focus) {
                        A.focus()
                    }
                    break;
                case 'newchart':
                    var d = arr[1].toLowerCase().search('url') != -1 ? 'URL' : FusionChartsDataFormats.JSON,
                        data, x, chartJson, linkchartId;
                    if (d === 'URL') {
                        data = c.replace(/[^\-]+-[^\-]+-/i, '')
                    } else {
                        chartJson = M.core.items[chartId].getChartData(FusionChartsDataFormats.JSON);
                        linkchartId = c.replace(/[^\-]+-[^\-]+-/i, '');
                        if (chartJson.linkeddata) {
                            for (x = 0; x < chartJson.linkeddata.length; x += 1) {
                                if (chartJson.linkeddata[x].id == linkchartId) {
                                    data = chartJson.linkeddata[x].linkedchart
                                }
                            }
                        }
                    }
                    M.raiseEvent('LinkedChartInvoked', {
                        linkType: d,
                        data: data
                    }, sender);
                    break;
                default:
                    arr = c.split(':');
                    if (arr[0].toLowerCase() == 'javascript') {
                        try {
                            eval(arr[1])
                        } catch (err) {}
                    } else {
                        window.location.href = c
                    }
                    break
                }
            }
        };
        var D = function (a) {
            var b = 0,
                x, y, temp;
            if (a instanceof Array) {
                for (x = 0; x < a.length; x += 1) {
                    if (a[x].data instanceof Array) {
                        for (y = 0; y < a[x].data.length; y += 1) {
                            temp = parseInt(a[x].data[y].z, 10);
                            b = (b > temp) ? b : temp
                        }
                    }
                }
            }
            return b
        };
        var E = function (a, b) {
            var c, max = 5;
            c = (a > b) ? b : a;
            if (c > 100) {
                max = c / 8
            }
            return max
        };
        var F = function (a, b) {
            var c = this.width,
                height = this.height,
                chart = u(this.src),
                id = this.id,
                jsonObj, container, dataComp, HCJson;
            removeChart(id, b);
            createContainer.call(this, a, id, c, height, b);
            dataComp = this.getChartData(FusionChartsDataFormats.JSON, true);
            jsonObj = dataComp.data;
            if (!FCFCC.highCharts[chart]) {
                HCJson = createMsg(id, 'ChartNotSupported', 'featurenotsupported')
            } else if (n[id].msgTxt) {
                HCJson = createMsg(id, 'msgTxt', undefined)
            } else if (this.jsVars && this.jsVars.LoadError) {
                HCJson = createMsg(id, 'LoadDataErrorText', undefined)
            } else if (this.jsVars && this.jsVars.stallLoad) {
                HCJson = createMsg(id, 'XMLLoadingText', undefined)
            } else if (dataComp.error instanceof Error) {
                HCJson = createMsg(id, 'InvalidXMLText', 'nodatatodisplay')
            } else {
                container = document.getElementById(id);
                HCJson = covertToFCC(id, chart, jsonObj, id, container.offsetWidth, container.offsetHeight);
                if (HCJson.series.length === 0) {
                    HCJson = createMsg(id, 'NoDataText', 'nodatatodisplay')
                }
            }
            return HCJson
        };
        var H = function (a, b) {
            if (b.options.renderer !== 'javascript') {
                return
            }
            var c = FCFCC.method.getExternalInterfaceMethods(b.chartType()).split(','),
                i;
            for (i = 0; i < c.length; i += 1) {
                if (typeof a[c[i]] === 'function') {
                    continue
                }
                if (FCFCC.method[c[i]] === undefined) {
                    a[c[i]] = noEffect
                } else {
                    a[c[i]] = FCFCC.method[c[i]]
                }
            }
        };

        function createChart(a, b) {
            var c = u(this.src),
                id = this.id;
            if (!(this.jsVars && this.jsVars.transparent)) {
                jQuery('#' + this.id).css('background-color', '#FFFFFF')
            }
            var d = document.getElementById(id);
            d.drawOverlayButton = drawOverlayButton;
            d.showChartMessage = showChartMessage;
            d.getExternalInterfaceMethods = FCFCC.method.getExternalInterfaceMethods;
            H(d, this);
            if (typeof a === 'function') {
                try {
                    a({
                        success: true,
                        ref: d,
                        id: id
                    })
                } catch (err) {}
            }
            d.FCC = new Highcharts.Chart(b);
            var e = jQuery('.highcharts-grid')[0];
            var f = jQuery('.highcharts-grid')[1];
            if (e && f) {
                e.parentNode.insertBefore(f, e)
            }
            FCC.items[id] = {
                'baseObj': b,
                'FCCObj': d,
                'chartType': c
            }
        }
        var I = function (c, d) {
            var e;
            clearTimeout(c.timeChach);
            e = M.core.items[d];
            c.timeChach = setTimeout((function (b) {
                return function () {
                    var a = b.id,
                        __containerId = b.options.containerElementId,
                        HCJson;
                    if (typeof __containerId !== 'undefined' && typeof FCC.items[a] !== 'undefined') {
                        HCJson = F.call(b, __containerId);
                        HCJson.chart.events.load = function () {
                            M.raiseEvent('loaded', {}, b);
                            M.raiseEvent('resized', {}, b)
                        };
                        HCJson.plotOptions.series.animation = false;
                        createChart.call(b, undefined, HCJson)
                    }
                }
            }(e)), 500)
        };
        var J = function () {
            var a, FCCContainer, id;
            for (var x in FCC.items) {
                id = x;
                a = FCC.items[x];
                FCCContainer = document.getElementById(x);
                if (FCCContainer && (FCCContainer.offsetWidth != a.FCCObj.FCC.chartWidth || FCCContainer.offsetHeight != a.FCCObj.FCC.chartHeight)) {
                    I(a, id)
                }
            }
        };
        if (window.addEventListener) {
            window.addEventListener("resize", J, false)
        } else if (window.attachEvent) {
            window.attachEvent("onresize", J)
        } else {
            window.onresize = J
        }
        var K = function (a) {
            return {
                FCconf: {
                    negative: false,
                    stackValue: []
                },
                chart: {
                    alignTicks: false,
                    renderTo: '',
                    ignoreHiddenSeries: false,
                    events: {
                        click: function () {
                            C.call(this, 1, a.chart.unescapelinks)
                        }
                    },
                    margin: [15, 15, 50, 60],
                    borderRadius: 0,
                    plotBackgroundColor: '#FFFFFF'
                },
                colors: [],
                credits: {
                    href: 'http://www.fusioncharts.com?BS=FCHSEvalMark',
                    text: 'FusionCharts - HighCharts',
                    enabled: N
                },
                global: {},
                labels: {
                    items: []
                },
                lang: {},
                legend: {
                    enabled: true,
                    symbolWidth: 5,
                    borderRadius: 0,
                    itemStyle: {}
                },
                loading: {},
                plotOptions: {
                    series: {
                        borderColor: '#333333',
                        events: {},
                        dataLabels: {
                            enabled: true,
                            color: '#555555',
                            style: {},
                            formatter: function () {
                                var x, y, showvalue = this.point.options.showvalue || this.series.options.showvalue || this.series.chart.options.chart.showvalue;
                                if (this.series.type == 'pie') {
                                    x = (a.chart.showlabels === '0' || !this.point.FCname ? '' : this.point.FCname);
                                    y = showvalue === '1' ? (Math.round(this.percentage * 100) / 100) + (a.chart.showpercentagevalues === '1' ? '%' : '') : '';
                                    return parseStr(x + (x !== '' && y !== '' ? a.chart.tooltipsepchar : '') + y)
                                } else if (showvalue === '1') {
                                    if (this.point.options.displayvalue) {
                                        x = this.point.options.displayvalue
                                    } else {
                                        x = v(this.y, a.chart, 1);
                                        if (this.series.options.FCtype == 1.5 && this.series.type == 'line') {
                                            x = this.y + '%'
                                        }
                                        if (this.series.options.FCtype == 7.5) {
                                            x = ''
                                        }
                                    }
                                    return parseStr(x)
                                } else {
                                    return ''
                                }
                            }
                        },
                        point: {
                            events: {
                                click: function () {
                                    C.call(this, 2, a.chart.unescapelinks)
                                }
                            }
                        }
                    },
                    area: {
                        states: {
                            hover: {
                                enabled: false
                            }
                        },
                        marker: {
                            lineWidth: 1,
                            radius: 3,
                            states: {
                                hover: {
                                    enabled: false
                                },
                                select: {
                                    enabled: false
                                }
                            }
                        }
                    },
                    areaspline: {
                        states: {
                            hover: {
                                enabled: false
                            }
                        },
                        marker: {
                            lineWidth: 1,
                            radius: 3,
                            states: {
                                hover: {
                                    enabled: false
                                },
                                select: {
                                    enabled: false
                                }
                            }
                        }
                    },
                    line: {
                        states: {
                            hover: {
                                enabled: false
                            }
                        },
                        marker: {
                            lineWidth: 1,
                            radius: 3,
                            states: {
                                hover: {
                                    enabled: false
                                },
                                select: {
                                    enabled: false
                                }
                            }
                        }
                    },
                    spline: {
                        states: {
                            hover: {
                                enabled: false
                            }
                        },
                        marker: {
                            lineWidth: 1,
                            radius: 3,
                            states: {
                                hover: {
                                    enabled: false
                                },
                                select: {
                                    enabled: false
                                }
                            }
                        }
                    },
                    pie: {
                        size: '80%',
                        allowPointSelect: true,
                        cursor: 'pointer'
                    },
                    column: {}
                },
                point: {},
                series: [{}],
                subtitle: {
                    text: '',
                    style: {}
                },
                symbols: [],
                title: {
                    text: '',
                    style: {}
                },
                toolbar: {},
                tooltip: {
                    borderRadius: 0,
                    style: {},
                    formatter: function () {
                        var x = '',
                            charSep = a.chart.tooltipsepchar;
                        if (this.point.options.tooltext) {
                            x = this.point.options.tooltext
                        } else {
                            if (this.series.options.FCtype >= 2 && this.series.name !== ' ') {
                                x += this.series.name + charSep
                            }
                            x += this.x ? this.x + charSep : '';
                            if (this.series.options.FCtype == 1.5 && this.series.type == 'line') {
                                x = this.x + charSep + this.y + '%'
                            } else if (this.series.type == 'pie') {
                                x = (this.point.FCname ? this.point.FCname + charSep : '') + (Math.round(this.percentage * 100) / 100) + (a.chart.showpercentintooltip === '0' ? '' : '%')
                            } else if (this.series.options.FCtype === 2.5) {
                                x = v(this.y, a.chart, 1)
                            } else {
                                x += v(this.y, a.chart, 1)
                            }
                            if (this.point.z) {
                                x += charSep + this.point.z
                            }
                        }
                        return parseStr(x)
                    }
                },
                xAxis: {
                    labels: {
                        rotation: -25,
                        style: {},
                        formatter: function () {
                            return parseStr(typeof this.value === 'string' ? this.value : '')
                        },
                        align: 'right'
                    },
                    categories: [],
                    plotLines: [],
                    plotBands: [],
                    title: {
                        style: {},
                        text: ''
                    }
                },
                yAxis: [{
                    startOnTick: false,
                    endOnTick: false,
                    title: {
                        style: {},
                        text: ''
                    },
                    labels: {
                        style: {},
                        formatter: function () {
                            return parseStr(v(this.value, a.chart, 1))
                        }
                    },
                    plotBands: [],
                    plotLines: []
                }, {
                    gridLineWidth: 0,
                    startOnTick: false,
                    endOnTick: false,
                    title: {
                        style: {},
                        text: ''
                    },
                    labels: {
                        style: {},
                        enabled: false,
                        formatter: function () {
                            return parseStr(v(this.value, a.chart, 2))
                        }
                    },
                    opposite: true
                }],
                exporting: {
                    buttons: {
                        exportButton: {},
                        printButton: {
                            enabled: false
                        }
                    }
                }
            }
        };

        function addVline(a, b, c, d, e) {
            a.xAxis.plotLines.push({
                color: convertColor(b || '#444444', c || 100),
                width: d ? d : 1,
                value: e
            })
        }
        function addPoint(a, b, c, d, e, f, g, h, i) {
            var x, y, isAbs = FCFCC.valueAbs[d],
                value, seriesType = a.type || f.chart.defaultSeriesType,
                dataseperator, tempY, dataYmax, dataYmin, loopMax;
            if (!a.yAxis) {
                dataYmax = 'dataY0max';
                dataYmin = 'dataY0min'
            } else {
                dataYmax = 'dataY' + a.yAxis + 'max';
                dataYmin = 'dataY' + a.yAxis + 'min'
            }
            if (c < 7 && c >= 2 && c != 2.5) {
                loopMax = f.xAxis.categories.length
            } else {
                loopMax = b.length
            }
            if (b instanceof Array) {
                for (y = 0; y < loopMax; y += 1) {
                    if (typeof b[y] === 'object') {
                        if (!b[y].vline) {
                            if (a.cursor != 'pointer' && b[y].link) {
                                a.cursor = 'pointer'
                            }
                            tempY = (isAbs ? Math.abs(parseFloat(b[y].value || b[y].y)) : parseFloat(b[y].value || b[y].y));
                            if (tempY < 0) {
                                f.FCconf.negative = true
                            }
                            if (typeof f.FCconf[dataYmax] === 'undefined' || tempY > f.FCconf[dataYmax]) {
                                f.FCconf[dataYmax] = tempY
                            }
                            if (typeof f.FCconf[dataYmin] === 'undefined' || tempY < f.FCconf[dataYmin]) {
                                f.FCconf[dataYmin] = tempY
                            }
                            if (typeof f.FCconf.stackValue[y] === 'undefined') {
                                f.FCconf.stackValue[y] = tempY
                            } else {
                                f.FCconf.stackValue[y] += tempY
                            }
                            a.data.push({
                                y: tempY || 0,
                                x: (isAbs ? Math.abs(parseFloat(b[y].x)) : parseFloat(b[y].x)) || undefined,
                                z: (isAbs ? Math.abs(parseFloat(b[y].z)) : parseFloat(b[y].z)) || undefined,
                                color: (c < 2 || b[y].color || b[y].alpha) ? convertColor(b[y].color || (c < 2 && g(y)), b[y].alpha, a.color) : undefined,
                                FCname: c < 2 ? b[y].label : undefined,
                                link: b[y].link,
                                sliced: b[y].issliced == '1',
                                id: e,
                                displayvalue: b[y].displayvalue,
                                showvalue: b[y].showvalue,
                                tooltext: b[y].tooltext,
                                marker: (seriesType === 'areaspline' || seriesType === 'spline' || seriesType === 'area' || seriesType === 'line') ? {
                                    enabled: b[y].drawanchors ? (b[y].drawanchors == '1' ? true : false) : undefined,
                                    radius: b[y].anchorradius ? b[y].anchorradius : undefined,
                                    symbol: w(parseInt(b[y].anchorsides, 10)),
                                    fillColor: b[y].anchorbgcolor ? convertColor(b[y].anchorbgcolor || 'FFFFFF', b[y].anchorbgalpha || 100) : undefined,
                                    lineColor: b[y].anchorbordercolor ? convertColor(b[y].anchorbordercolor || '767575', b[y].anchoralpha || 100) : undefined,
                                    lineWidth: b[y].anchorborderthickness ? b[y].anchorborderthickness : undefined
                                } : (c === 7.5 ? {
                                    radius: b[y].z ? Math.round((b[y].z / h) * 10) / 10 : undefined
                                } : null)
                            });
                            if (c < 2) {
                                f.xAxis.categories.push(b[y].showlabel === '0' ? '' : (b[y].label || ''))
                            }
                        } else if (c < 2) {
                            addVline(f, b[y].color, b[y].alpha, b[y].thickness, y - 0.5)
                        }
                    } else if (typeof b[y] === 'string' && i.chart.compactdatamode == '1') {
                        dataseperator = i.chart.dataseparator || '|';
                        value = b[y].split(dataseperator);
                        for (x = 0; x < value.length; x += 1) {
                            tempY = isAbs ? Math.abs(parseFloat(value[x])) : parseFloat(value[x]);
                            if (tempY < 0) {
                                f.FCconf.negative = true
                            }
                            if (typeof f.FCconf[dataYmax] === 'undefined' || tempY > f.FCconf[dataYmax]) {
                                f.FCconf[dataYmax] = tempY
                            }
                            if (typeof f.FCconf[dataYmin] === 'undefined' || tempY < f.FCconf[dataYmin]) {
                                f.FCconf[dataYmin] = tempY
                            }
                            a.data.push({
                                y: tempY || 0
                            })
                        }
                    } else {
                        a.data.push({
                            y: 0
                        })
                    }
                }
            }
        }
        function addCategory(a, b, c) {
            var x, dataseperator, countCat = 0,
                zoomCat = [];
            if (a.categories && a.categories[0].category) {
                for (x = 0; x < a.categories[0].category.length; x += 1) {
                    if (typeof a.categories[0].category[x] === 'object') {
                        if (!a.categories[0].category[x].vline) {
                            if (b == 2.5) {
                                zoomCat.push(a.categories[0].category[x].label ? a.categories[0].category[x].label : '')
                            } else {
                                c.xAxis.categories.push(a.categories[0].category[x].label ? a.categories[0].category[x].label : '')
                            }
                            countCat += 1
                        } else {
                            addVline(c, a.categories[0].category[x].color, a.categories[0].category[x].alpha, a.categories[0].category[x].thickness, countCat - 0.5)
                        }
                    } else if (typeof a.categories[0].category[x] === 'string' && a.chart.compactdatamode == '1') {
                        dataseperator = a.chart.dataseparator ? a.chart.dataseparator : '|';
                        if (b == 2.5) {
                            zoomCat = zoomCat.concat(a.categories[0].category[x].split(dataseperator))
                        } else {
                            c.xAxis.categories = c.xAxis.categories.concat(a.categories[0].category[x].split(dataseperator))
                        }
                    }
                }
            }
            if (b === 2.5) {
                c.xAxis.maxZoom = 2;
                c.chart.zoomType = 'x';
                c.chart.showvalue = a.chart.showvalues === '1' ? '1' : '0';
                c.xAxis.categories = undefined;
                c.xAxis.min = 0;
                c.xAxis.max = zoomCat.length - 1;
                c.xAxis.endOnTick = false;
                c.xAxis.labels.formatter = function () {
                    return parseStr(zoomCat[this.value])
                }
            }
        }
        function MSStacked(b, c, d, e, f, g, h, i) {
            var x, y, z, newSeries, count_set = 0,
                max_cat = 0,
                a = [],
                plotWidth = f - (e.chart.margin[1] + e.chart.margin[3]),
                plotHight = g - (e.chart.margin[0] + e.chart.margin[2]),
                noStack, pointWidth, catWidth, tempheight, maxHight = 0,
                pointValue = 0;
            if (b.categories && b.categories[0] && b.categories[0].category) {
                max_cat = b.categories[0].category.length
            }
            if (b.dataset && b.dataset instanceof Array) {
                noStack = b.dataset.length;
                catWidth = plotWidth / max_cat;
                pointWidth = catWidth / (noStack + 2);
                for (x = 0; x < b.dataset.length; x += 1) {
                    tempheight = [];
                    if (b.dataset[x].dataset && b.dataset[x].dataset instanceof Array) {
                        for (y = 0; y < b.dataset[x].dataset.length; y += 1) {
                            newSeries = {
                                FCtype: c,
                                type: b.dataset[x].dataset[y].renderas ? FCFCC.combi[b.dataset[x].dataset[y].renderas.toLowerCase()] : undefined,
                                name: b.dataset[x].dataset[y].seriesname ? b.dataset[x].dataset[y].seriesname : ' ',
                                data: [],
                                color: convertColor(b.dataset[x].color || i(count_set), b.dataset[x].dataset[y].alpha || 100),
                                yAxis: b.dataset[x].dataset[y].parentyaxis == 'S' ? 1 : undefined,
                                showvalue: b.dataset[x].dataset[y].showvalues,
                                mColum: x,
                                mStack: y
                            };
                            if (b.dataset[x].dataset[y].data instanceof Array) {
                                for (z = 0; z < max_cat; z += 1) {
                                    tempheight[z] = tempheight[z] ? tempheight[z] : 0;
                                    pointValue = (b.dataset[x].dataset[y].data[z] && b.dataset[x].dataset[y].data[z].value) ? parseFloat(b.dataset[x].dataset[y].data[z].value) : '';
                                    tempheight[z] += pointValue ? pointValue : 0;
                                    newSeries.data.push({
                                        MWidth: pointWidth,
                                        MX: (z * catWidth) + ((x + 1) * pointWidth),
                                        MY: tempheight[z],
                                        y: pointValue,
                                        link: b.dataset[x].dataset[y].data[z].link,
                                        id: h,
                                        color: b.dataset[x].dataset[y].data[z].color ? convertColor(b.dataset[x].dataset[y].data[z].color || i(count_set), b.dataset[x].dataset[y].data[z].alpha || 100) : undefined
                                    })
                                }
                            }
                            a.push(newSeries);
                            count_set += 1
                        }
                    }
                    for (z = 0; z < max_cat; z += 1) {
                        if (maxHight < tempheight[z]) {
                            maxHight = tempheight[z]
                        }
                    }
                }
            }
            e.yAxis[0].max = maxHight + 5;
            return a
        }
        function addData(c, d, e, f, g, h, i) {
            var a = [],
                x, y, z, count_set, getScolor, pareto, yCalTemp;
            getScolor = function (a) {
                var b;
                b = (c.chart.palettecolors) ? ((typeof c.chart.palettecolors === 'string') ? c.chart.palettecolors.split(',') : c.chart.palettecolors) : FCFCC.color;
                return b[a % b.length]
            };
            switch (d) {
            case 1:
            case 1.5:
                if (d == 1.5) {
                    f.yAxis[1].max = 100;
                    f.yAxis[1].labels.formatter = function () {
                        return parseStr(this.value + '%')
                    };
                    if (c.data instanceof Array) {
                        c.data.sort(function (a, b) {
                            return parseFloat(b.value) - parseFloat(a.value)
                        })
                    }
                }
                f.legend.enabled = false;
                if (c.data) {
                    z = createSeries(d);
                    addPoint(z, c.data, d, e, i, f, getScolor);
                    if (s(e) == 'pie') {
                        z.data.reverse();
                        z.color = undefined;
                        f.chart.plotBorderWidth = 0;
                        x = f.chart.borderWidth + 1;
                        f.chart.margin = [f.chart.margin[0], x, x, x]
                    }
                    a.push(z);
                    if ((e == 'Pareto2D' || e == 'Pareto3D') && c.chart.showcumulativeline !== '0') {
                        pareto = t(z.data);
                        a.push(pareto)
                    }
                }
                break;
            case 2:
            case 2.2:
            case 2.5:
            case 3:
            case 4:
            case 5:
            case 5.5:
            case 6:
            case 6.5:
                switch (d) {
                case 2.2:
                    f.yAxis[0].reversed = true;
                    f.yAxis[0].PCreversed = true;
                    break;
                case 3:
                    if (c.chart.stack100percent == '1') {
                        f.plotOptions.series.stacking = 'percent';
                        f.yAxis[0].labels.formatter = function () {
                            return parseStr(this.value + '%')
                        }
                    } else {
                        f.plotOptions.series.stacking = 'normal'
                    }
                    break;
                case 5.5:
                    f.plotOptions.column.stacking = c.chart.stack100percent == '1' ? 'percent' : 'normal'
                }
                addCategory(c, d, f);
                if (d !== 6) {
                    if (c.dataset) {
                        count_set = 0;
                        for (x = 0; x < c.dataset.length; x += 1) {
                            z = createSeries(d, convertColor(c.dataset[x].color || getScolor(count_set), c.dataset[x].alpha || 100), c.dataset[x].renderas ? FCFCC.combi[c.dataset[x].renderas.toLowerCase()] : ((c.dataset[x].parentyaxis == 'S' && (d == 5 || d == 5.5)) ? 'line' : undefined), c.dataset[x].seriesname, c.dataset[x].parentyaxis == 'S', c.dataset[x].showvalues, c.dataset[x].plotbordercolor ? convertColor(c.dataset[x].plotbordercolor, c.dataset[x].plotborderalpha || 95) : undefined, parseInt(c.dataset[x].plotborderthickness || c.dataset[x].linethickness, 10) || undefined);
                            var j = z.type || f.chart.defaultSeriesType;
                            z.marker = (j === 'area' || j === 'line' || j === 'spline' || j === 'areaspline') ? {
                                enabled: c.dataset[x].drawanchors ? (c.dataset[x].drawanchors == '1' ? true : false) : undefined,
                                radius: c.dataset[x].anchorradius ? c.dataset[x].anchorradius : undefined,
                                symbol: w(parseInt(c.dataset[x].anchorsides, 10)),
                                fillColor: c.dataset[x].anchorbgcolor ? convertColor(c.dataset[x].anchorbgcolor || 'FFFFFF', c.dataset[x].anchorbgalpha || 100) : undefined,
                                lineColor: c.dataset[x].anchorbordercolor ? convertColor(c.dataset[x].anchorbordercolor || '767575', c.dataset[x].anchoralpha || 100) : undefined,
                                lineWidth: c.dataset[x].anchorborderthickness ? c.dataset[x].anchorborderthickness : undefined
                            } : null;
                            count_set += 1;
                            if (c.dataset[x].data) {
                                addPoint(z, c.dataset[x].data, d, e, i, f, undefined, undefined, c)
                            }
                            a.push(z)
                        }
                        if (d == 3 || d == 5.5 || s(e) == 'bar') {
                            var k = [];
                            for (x = 0; x < a.length; x += 1) {
                                if (a[x].type) {
                                    k.push(a[x])
                                } else {
                                    k.splice(0, 0, a[x])
                                }
                            }
                            a = k;
                            f.legend.reversed = true
                        }
                    }
                } else {
                    a = MSStacked(c, d, e, f, g, h, i, getScolor)
                }
                break;
            case 7:
            case 7.5:
                f.chart.showvalue = c.chart.showvalues == '1' ? '1' : '0';
                if (c.categories && c.categories[0] && c.categories[0].category) {
                    for (x = 0; x < c.categories[0].category.length; x += 1) {
                        if (c.categories[0].category[x].showverticalline && c.categories[0].category[x].showverticalline == '1') {
                            addVline(f, c.categories[0].verticallinecolor, c.categories[0].verticallinealpha, c.categories[0].verticallinethickness, c.categories[0].category[x].x)
                        }
                        f.xAxis.categories[c.categories[0].category[x].x] = c.categories[0].category[x].label ? c.categories[0].category[x].label : ''
                    }
                }
                var l = D(c.dataset) / E(g, h);
                if (c.dataset) {
                    count_set = 0;
                    for (x = 0; x < c.dataset.length; x += 1) {
                        z = createSeries(d, convertColor(c.dataset[x].color || getScolor(count_set), c.dataset[x].alpha || 100), c.dataset[x].renderas ? FCFCC.combi[c.dataset[x].renderas] : ((c.dataset[x].parentyaxis == 'S' && (d == 5 || d == 5.5)) ? 'line' : undefined), c.dataset[x].seriesname, c.dataset[x].parentyaxis == 'S', c.dataset[x].showvalues, undefined, undefined);
                        z.marker = {
                            symbol: (d == 7.5) ? 'circle' : w(parseInt(c.dataset[x].anchorsides, 10)),
                            states: {
                                hover: {
                                    enabled: false
                                }
                            }
                        };
                        count_set += 1;
                        if (c.dataset[x].data) {
                            addPoint(z, c.dataset[x].data, d, e, i, f, getScolor, l)
                        }
                        a.push(z)
                    }
                }
                f.xAxis.max = c.chart.xaxismaxvalue ? parseInt(c.chart.xaxismaxvalue, 10) : undefined;
                f.xAxis.min = c.chart.xaxisminvalue ? parseInt(c.chart.xaxisminvalue, 10) : undefined;
                f.xAxis.showLastLabel = true;
                break;
            default:
                break
            }
            if (!((d === 3 || d === 5.5) && c.chart.stack100percent === '1') && e !== 'Marimekko') {
                if (d === 3 || d === 5.5) {
                    f.FCconf.dataY0max = f.FCconf.stackValue[0];
                    f.FCconf.dataY0min = f.FCconf.stackValue[0];
                    for (y = 1; y < f.FCconf.stackValue.length; y += 1) {
                        if (f.FCconf.stackValue[y] > f.FCconf.dataY0max) {
                            f.FCconf.dataY0max = f.FCconf.stackValue[y]
                        }
                        if (f.FCconf.stackValue[y] < f.FCconf.dataY0min) {
                            f.FCconf.dataY0min = f.FCconf.stackValue[y]
                        }
                    }
                }
                if (d === 1.5 || d === 5.5 || d === 5 || d === 6.5) {
                    yCalTemp = o(f.FCconf.dataY0max, f.FCconf.dataY0min, c.chart.pyaxismaxvalue, c.chart.pyaxisminvalue, '', c.chart.setadaptiveymin !== '1');
                    f.yAxis[0].max = yCalTemp.Max;
                    f.yAxis[0].min = yCalTemp.Min;
                    if (d !== 1.5) {
                        yCalTemp = o(f.FCconf.dataY1max, f.FCconf.dataY1min, c.chart.syaxismaxvalue, c.chart.syaxisminvalue, '', c.chart.setadaptivesymin !== '1');
                        f.yAxis[1].max = yCalTemp.Max;
                        f.yAxis[1].min = yCalTemp.Min
                    }
                } else {
                    yCalTemp = o(f.FCconf.dataY0max, f.FCconf.dataY0min, c.chart.yaxismaxvalue, c.chart.yaxisminvalue, '', c.chart.setadaptiveymin !== '1');
                    f.yAxis[0].max = yCalTemp.Max;
                    f.yAxis[0].min = yCalTemp.Min
                }
            }
            f.series = a
        }
        function ModyfyLegend(b, c) {
            var d = b.series.length,
                legendPos, legendWidth, legendHeight;
            if (c.chart.showlegend == '0') {
                b.legend.enabled = false
            } else {
                b.legend.labelFormatter = function () {
                    return parseStr(this.name)
                };
                if (c.chart.interactivelegend == '0') {
                    b.plotOptions.series.events.legendItemClick = function (a) {
                        return false
                    };
                    b.legend.itemStyle.cursor = 'default'
                }
                b.legend.shadow = c.chart.legendshadow == '0' ? false : true;
                b.legend.backgroundColor = convertColor(c.chart.legendbgcolor || '#ffffff', c.chart.legendbgalpha || 100);
                b.legend.borderColor = convertColor(c.chart.legendbordercolor || '#545454', c.chart.legendborderalpha || 100);
                b.legend.borderWidth = c.chart.legendborderthickness || 1;
                if (c.reverselegend == '1') {
                    b.legend.reversed = !b.legend.reversed
                }
                if (c.chart.legendposition == 'RIGHT') {
                    b.legend.verticalAlign = 'middle';
                    b.legend.align = 'right';
                    b.legend.width = 70;
                    b.legend.x = -15;
                    b.chart.margin[1] += 85
                } else {
                    b.legend.x = 0;
                    b.chart.margin[2] += 46
                }
            }
        }
        function createText(a, b, c) {
            return {
                html: a,
                style: {
                    left: c + 'px',
                    top: b + 'px'
                }
            }
        }
        function convertMarimeko(a, b, c, d, e) {
            var f = c - (a.chart.margin[1] + a.chart.margin[3]),
                plotHight = d - (a.chart.margin[0] + a.chart.margin[2]),
                y, z, arr = [],
                total = 0,
                temp, setPersent = false,
                catCountFlag = true,
                temp2, totalpercent = 0;
            if (a.xAxis.labels.enabled === false && b.chart.showxaxispercentvalues != '0') {
                a.xAxis.title.margin += 15;
                a.chart.margin[2] += 15
            }
            if (a.xAxis.labels.enabled !== false && b.chart.showxaxispercentvalues != '0') {
                plotHight += 15
            }
            if (e && e[0] && e[0].category instanceof Array) {
                temp = 0;
                for (y = 0; y < e[0].category.length; y += 1) {
                    if (e[0].category[y].widthpercent) {
                        temp += parseFloat(e[0].category[y].widthpercent)
                    } else {
                        break
                    }
                }
                if (y === e[0].category.length && Math.round(temp) === 100) {
                    setPersent = true
                }
            }
            for (y = 0; y < a.series.length; y += 1) {
                for (z = 0; z < a.series[y].data.length; z += 1) {
                    if (typeof a.series[y].data[z] == 'object') {
                        temp = parseFloat(a.series[y].data[z].y)
                    } else {
                        temp = parseFloat(a.series[y].data[z])
                    }
                    arr[z] = arr[z] ? arr[z] + temp : temp;
                    total += temp
                }
            }
            for (y = 0; y < a.series.length; y += 1) {
                temp = 0;
                for (z = 0; z < a.series[y].data.length; z += 1) {
                    if (typeof a.series[y].data[z] !== 'object') {
                        a.series[y].data[z] = {
                            y: a.series[y].data[z]
                        }
                    }
                    a.series[y].data[z].MX = temp;
                    if (catCountFlag) {
                        if (a.xAxis.labels.enabled !== false) {
                            a.labels.items.push(createText(a.xAxis.categories[z], plotHight, temp))
                        }
                        if (b.chart.showsum != '0') {
                            a.labels.items.push(createText(v(arr[z], b.chart), '-14', temp))
                        }
                    }
                    temp2 = setPersent ? parseFloat(e[0].category[z].widthpercent) / 100 : (arr[z] / total);
                    totalpercent += temp2;
                    temp += a.series[y].data[z].MWidth = Math.round(f * temp2);
                    if (catCountFlag && b.chart.showxaxispercentvalues != '0' && totalpercent < 0.9) {
                        a.labels.items.push(createText((Math.round(totalpercent * 10000) / 100) + '%', plotHight - 15, temp - 20))
                    }
                }
                catCountFlag = false
            }
            a.xAxis.labels.enabled = false
        }
        function covertToFCC(a, b, c, d, e, f) {
            var g, y = getSeriesName(b),
                x, z, l, j, styleName, tempstyle = {},
                styleArr;
            c.chart = c.chart || c.graph || {};
            delete c.graph;
            c.chart.tooltipsepchar = c.chart.tooltipsepchar || ',';
            g = K(c);
            g.chart.renderTo = a;
            g.chart.defaultSeriesType = s(b);
            if (g.chart.defaultSeriesType === 'line' || g.chart.defaultSeriesType === 'spline' || g.chart.defaultSeriesType === 'area' || g.chart.defaultSeriesType === 'areaspline') {
                g.xAxis.startOnTick = true;
                g.xAxis.endOnTick = true;
                g.xAxis.showLastLabel = true
            }
            g.plotOptions.series.shadow = c.chart.showshadow === '1';
            if (b == 'Doughnut2D' || b == 'Doughnut3D') {
                g.plotOptions.pie.innerSize = '50%'
            }
            if (c.chart.clickurl) {
                g.chart.link = c.chart.clickurl;
                g.chart.id = d
            }
            g.plotOptions.series.animation = c.chart.animation === '0' ? false : true;
            if (c.chart.showlabels == '0') {
                g.xAxis.labels.enabled = false;
                g.chart.margin[2] = 15
            }
            if (c.chart.showyaxisvalues == '0' || c.chart.showdivlinevalues == '0' || c.chart.showdivlinevalue == '0') {
                g.yAxis[0].labels.enabled = false;
                g.chart.margin[3] = 15
            }
            if (((y == 5 || y == 5.5) && c.chart.showyaxisvalues != '0' && c.chart.showdivlinesecondaryvalue != '0') || (y === 1.5 && c.chart.showdivlinesecondaryvalue != '0')) {
                g.yAxis[1].labels.enabled = true;
                g.chart.margin[1] = 50
            }
            g.xAxis.labels.style = {
                fontFamily: c.chart.outcnvbasefont || c.chart.basefont || 'Verdana',
                fontSize: (c.chart.outcnvbasefontsize || c.chart.basefontsize || '10') + 'px',
                color: c.chart.outcnvbasefontcolor || c.chart.basefontcolor || '#555555'
            };
            g.yAxis[0].labels.style = {
                fontFamily: c.chart.outcnvbasefont || c.chart.basefont || 'Verdana',
                fontSize: (c.chart.outcnvbasefontsize || c.chart.basefontsize || '10') + 'px',
                color: c.chart.outcnvbasefontcolor || c.chart.basefontcolor || '#555555'
            };
            g.yAxis[1].labels.style = {
                fontFamily: c.chart.outcnvbasefont || c.chart.basefont || 'Verdana',
                fontSize: (c.chart.outcnvbasefontsize || c.chart.basefontsize || '10') + 'px',
                color: c.chart.outcnvbasefontcolor || c.chart.basefontcolor || '#555555'
            };
            g.legend.itemStyle = {
                fontFamily: c.chart.outcnvbasefont || c.chart.basefont || 'Verdana',
                fontSize: (c.chart.outcnvbasefontsize || c.chart.basefontsize || '10') + 'px',
                color: c.chart.outcnvbasefontcolor || c.chart.basefontcolor || '#555555'
            };
            g.plotOptions.series.dataLabels.style = {
                fontFamily: c.chart.basefont || 'Verdana',
                fontSize: (c.chart.basefontsize || '10') + 'px',
                color: c.chart.basefontcolor || '#555555'
            };
            g.tooltip.style = {
                fontFamily: c.chart.basefont || 'Verdana',
                fontSize: (c.chart.basefontsize || '10') + 'px',
                color: c.chart.basefontcolor || '#555555'
            };
            if (c.chart.drawanchors == '0') {
                g.plotOptions.area.marker.enabled = g.plotOptions.line.marker.enabled = g.plotOptions.areaspline.marker.enabled = g.plotOptions.spline.marker.enabled = false;
                g.tooltip.enabled = false
            }
            if (c.chart.anchorradius) {
                g.plotOptions.area.marker.radius = g.plotOptions.line.marker.radius = g.plotOptions.areaspline.marker.radius = g.plotOptions.spline.marker.radius = c.chart.anchorradius
            }
            g.plotOptions.line.marker.lineColor = g.plotOptions.areaspline.marker.lineColor = g.plotOptions.spline.marker.lineColor = convertColor(c.chart.anchorbordercolor || '767575', c.chart.anchoralpha || 100);
            g.plotOptions.area.marker.lineColor = convertColor(c.chart.anchorbordercolor || '767575', c.chart.anchoralpha || 0);
            if (c.chart.anchorborderthickness) {
                g.plotOptions.area.marker.lineWidth = g.plotOptions.line.marker.lineWidth = g.plotOptions.areaspline.marker.lineWidth = g.plotOptions.spline.marker.lineWidth = c.chart.anchorborderthickness
            }
            g.plotOptions.line.marker.fillColor = g.plotOptions.spline.marker.fillColor = convertColor(c.chart.anchorbgcolor || 'FFFFFF', c.chart.anchorbgalpha || 100);
            g.plotOptions.area.marker.fillColor = g.plotOptions.areaspline.marker.fillColor = convertColor(c.chart.anchorbgcolor || 'FFFFFF', c.chart.anchorbgalpha || 0);
            if (c.chart.anchorsides) {
                g.plotOptions.area.marker.symbol = g.plotOptions.line.marker.symbol = g.plotOptions.areaspline.marker.symbol = g.plotOptions.spline.marker.symbol = w(parseInt(c.chart.anchorsides, 10))
            }
            g.plotOptions.line.lineWidth = g.plotOptions.spline.lineWidth = parseInt(c.chart.linethickness, 10) || (y === 1.5 ? 2 : 3);
            g.plotOptions.line.color = g.plotOptions.spline.color = convertColor(c.chart.linecolor || '767575', c.chart.linealpha || 100);
            g.plotOptions.area.color = g.plotOptions.areaspline.color = convertColor(c.chart.plotfillcolor || '767575', c.chart.plotfillalpha || 90);
            g.plotOptions.area.lineColor = g.plotOptions.areaspline.lineColor = convertColor(c.chart.plotbordercolor || "333333", c.chart.plotborderalpha || 95);
            g.plotOptions.area.lineWidth = g.plotOptions.areaspline.lineWidth = parseInt(c.chart.plotborderthickness, 10) || 1;
            g.yAxis[0].alternateGridColor = convertColor(c.chart.alternatehgridcolor || 'EEEEEE', c.chart.alternatehgridalpha || 50);
            g.yAxis[0].gridLineColor = convertColor(c.chart.divlinecolor || '717170', c.chart.divlinealpha || 40);
            g.yAxis[0].gridLineWidth = c.chart.divlinethickness ? c.chart.divlinethickness : 1;
            if (c.chart.caption) {
                g.title.text = parseStr(c.chart.caption);
                g.chart.margin[0] = 35;
                g.title.style = {
                    fontFamily: c.chart.outcnvbasefont || c.chart.basefont || 'Verdana',
                    fontSize: '13px',
                    'font-weight': 'bold',
                    color: c.chart.outcnvbasefontcolor || c.chart.basefontcolor || '#555555'
                }
            }
            if (c.chart.subcaption) {
                g.subtitle.text = parseStr(c.chart.subcaption);
                g.chart.margin[0] = 55;
                g.subtitle.style = {
                    fontFamily: c.chart.outcnvbasefont || c.chart.basefont || 'Verdana',
                    fontSize: '11px',
                    'font-weight': 'bold',
                    color: c.chart.outcnvbasefontcolor || c.chart.basefontcolor || '#555555'
                }
            }
            if (c.chart.xaxisname) {
                g.xAxis.title.text = parseStr(c.chart.xaxisname);
                g.xAxis.title.margin = g.chart.margin[2];
                g.chart.margin[2] += 20;
                g.xAxis.title.style = {
                    fontFamily: c.chart.outcnvbasefont || c.chart.basefont || 'Verdana',
                    fontSize: (c.chart.outcnvbasefontsize || c.chart.basefontsize || '10') + 'px',
                    'font-weight': 'bold',
                    color: c.chart.outcnvbasefontcolor || c.chart.basefontcolor || '#555555'
                }
            }
            if (y == 5 || y == 5.5 || y == 1.5) {
                if (c.chart.pyaxisname) {
                    g.yAxis[0].title.text = parseStr(c.chart.pyaxisname);
                    g.yAxis[0].title.margin = g.chart.margin[3];
                    g.chart.margin[3] += 20;
                    g.yAxis[0].title.style = {
                        fontFamily: c.chart.outcnvbasefont || c.chart.basefont || 'Verdana',
                        fontSize: (c.chart.outcnvbasefontsize || c.chart.basefontsize || '10') + 'px',
                        'font-weight': 'bold',
                        color: c.chart.outcnvbasefontcolor || c.chart.basefontcolor || '#555555'
                    }
                }
                if (c.chart.syaxisname) {
                    g.yAxis[1].title.text = parseStr(c.chart.syaxisname);
                    g.yAxis[1].title.margin = g.chart.margin[1];
                    g.chart.margin[1] += 20;
                    g.yAxis[1].title.style = {
                        fontFamily: c.chart.outcnvbasefont || c.chart.basefont || 'Verdana',
                        fontSize: (c.chart.outcnvbasefontsize || c.chart.basefontsize || '10') + 'px',
                        'font-weight': 'bold',
                        color: c.chart.outcnvbasefontcolor || c.chart.basefontcolor || '#555555'
                    }
                }
            } else if (c.chart.yaxisname) {
                g.yAxis[0].title.text = parseStr(c.chart.yaxisname);
                g.yAxis[0].title.margin = g.chart.margin[3];
                g.chart.margin[3] += 20;
                g.yAxis[0].title.style = {
                    fontFamily: c.chart.outcnvbasefont || c.chart.basefont || 'Verdana',
                    fontSize: (c.chart.outcnvbasefontsize || c.chart.basefontsize || '10') + 'px',
                    'font-weight': 'bold',
                    color: c.chart.outcnvbasefontcolor || c.chart.basefontcolor || '#555555'
                }
            }
            if (c.chart.showtooltip == '0') {
                g.tooltip.enabled = false
            }
            g.tooltip.backgroundColor = convertColor(c.chart.tooltipbgcolor || 'FFFFFF', c.chart.tooltipbgalpha || 100);
            g.tooltip.borderColor = convertColor(c.chart.tooltipbordercolor || '545454', c.chart.tooltipborderalpha || 100);
            g.tooltip.shadow = c.chart.showtooltipshadow == '1' ? true : false;
            g.chart.showvalue = c.chart.showvalues == '0' ? '0' : '1';
            if (c.trendlines) {
                for (x = 0; x < c.trendlines.length; x += 1) {
                    if (c.trendlines[x].line) {
                        for (z = 0; z < c.trendlines[x].line.length; z += 1) {
                            if (c.trendlines[x].line[z].istrendzone == '1') {
                                g.yAxis[0].plotBands.push({
                                    color: convertColor(c.trendlines[x].line[z].color || '333333', c.trendlines[x].line[z].alpha || 99),
                                    from: c.trendlines[x].line[z].startvalue ? c.trendlines[x].line[z].startvalue : 0,
                                    to: c.trendlines[x].line[z].endvalue
                                })
                            }
                            g.yAxis[0].plotLines.push({
                                color: convertColor(c.trendlines[x].line[z].color || '333333', c.trendlines[x].line[z].alpha || 99),
                                value: c.trendlines[x].line[z].startvalue ? c.trendlines[x].line[z].startvalue : 0,
                                width: c.trendlines[x].line[z].thickness ? c.trendlines[x].line[z].thickness : 1
                            })
                        }
                    }
                }
            }
            if (c.vtrendlines) {
                for (x = 0; x < c.vtrendlines.length; x += 1) {
                    if (c.vtrendlines[x].line) {
                        for (z = 0; z < c.vtrendlines[x].line.length; z += 1) {
                            if (c.vtrendlines[x].line[z].istrendzone !== '0') {
                                g.xAxis.plotBands.push({
                                    color: convertColor(c.vtrendlines[x].line[z].color || '333333', c.vtrendlines[x].line[z].alpha || 99),
                                    from: c.vtrendlines[x].line[z].startvalue ? c.vtrendlines[x].line[z].startvalue : 0,
                                    to: c.vtrendlines[x].line[z].endvalue
                                })
                            }
                            g.xAxis.plotLines.push({
                                color: convertColor(c.vtrendlines[x].line[z].color || '333333', c.vtrendlines[x].line[z].alpha || 99),
                                value: c.vtrendlines[x].line[z].startvalue ? c.vtrendlines[x].line[z].startvalue : 0,
                                width: c.vtrendlines[x].line[z].thickness ? c.vtrendlines[x].line[z].thickness : 1
                            })
                        }
                    }
                }
            }
            g.exporting.enabled = c.chart.exportenabled == '1' ? true : false;
            g.exporting.buttons.exportButton.enabled = c.chart.exportshowmenuitem == '0' ? false : true;
            g.exporting.filename = c.chart.exportfilename ? c.chart.exportfilename : 'FusionCharts';
            g.exporting.width = e;
            if (c.styles && c.styles.definition instanceof Array && c.styles.application instanceof Array) {
                for (j = 0; j < c.styles.definition.length; j += 1) {
                    if (typeof FCFCC.supportedStyle[c.styles.definition[j].type] === 'function') {
                        tempstyle[c.styles.definition[j].name.toLowerCase()] = c.styles.definition[j]
                    }
                }
                for (j = 0; j < c.styles.application.length; j += 1) {
                    styleArr = c.styles.application[j].styles.split(',');
                    for (l = 0; l < styleArr.length; l += 1) {
                        styleName = styleArr[l].toLowerCase();
                        if (tempstyle[styleName]) {
                            FCFCC.supportedStyle[tempstyle[styleName].type](g, c.styles.application[j].toobject.toLowerCase(), tempstyle[styleName])
                        }
                    }
                }
            }
            g.chart.borderWidth = c.chart.showborder == '0' ? 0 : (c.chart.borderthickness ? c.chart.borderthickness : 1);
            g.chart.borderColor = convertColor(c.chart.bordercolor || '767575', c.chart.borderalpha || 50);
            g.chart.plotBorderColor = convertColor(c.chart.canvasbordercolor || '545454', c.chart.canvasborderalpha || 100);
            g.chart.plotBorderWidth = c.chart.canvasborderthickness ? c.chart.canvasborderthickness : 2;
            g.plotOptions.series.borderColor = convertColor(c.chart.plotbordercolor || '333333', c.chart.plotborderalpha || 95);
            g.plotOptions.series.borderWidth = c.chart.showplotborder == '0' ? 0 : (c.chart.plotborderthickness ? c.chart.plotborderthickness : 1);
            g.plotOptions.series.borderRadius = c.chart.useroundedges == '1' ? 5 : 0;
            g.yAxis[0].plotLines.push({
                color: convertColor(c.chart.zeroplanecolor || '717170', c.chart.zeroplanealpha || 80),
                value: 0,
                width: c.chart.zeroplanethickness || 2
            });
            addData(c, y, b, g, e, f, d);
            if (y >= 2) {
                ModyfyLegend(g, c)
            }
            if (typeof jsConf[d] === 'object') {
                g = margeClone(g, jsConf[d])
            }
            if (b == 'Marimekko') {
                g.plotOptions.series.pointPadding = 0;
                g.plotOptions.series.groupPadding = 0;
                g.plotOptions.series.shadow = false;
                g.plotOptions.series.dataLabels.y = 12;
                g.tooltip.formatter = function () {
                    var x = '',
                        charSep = c.chart.tooltipsepchar;
                    x += this.series.name !== ' ' ? this.series.name + charSep : '';
                    x += this.x ? this.x + charSep : '';
                    if (c.chart.usepercentdistribution != '0') {
                        x += (parseInt(this.percentage * 100, 10) / 100) + '%'
                    } else {
                        x += v(this.y, c.chart, 1)
                    }
                    return parseStr(x)
                };
                if (c.chart.usepercentdistribution == '0') {
                    g.plotOptions.series.stacking = 'normal'
                } else {
                    g.plotOptions.series.stacking = 'percent';
                    g.yAxis[0].labels.formatter = function () {
                        return parseStr(this.value + '%')
                    }
                }
                convertMarimeko(g, c, e, f, c.categories)
            }
            g.chart.backgroundColor = r(0, 0, e, f ? f : 400, c.chart.bgangle !== undefined ? c.chart.bgangle : 270, c.chart.bgcolor ? c.chart.bgcolor : "CBCBCB,E9E9E9", c.chart.bgalpha ? c.chart.bgalpha : "50,50", c.chart.bgratio ? c.chart.bgratio : "0,100");
            var h, plotY;
            if ('\v' === 'v') {
                h = 0;
                plotY = 0
            } else {
                h = g.chart.margin[3];
                plotY = g.chart.margin[0]
            }
            g.chart.plotBackgroundColor = (s(b) == 'pie') ? 'rgba(255,255,255,0)' : (r(h, plotY, e - (g.chart.margin[1] + g.chart.margin[3]), (f ? f : 400) - (g.chart.margin[0] + g.chart.margin[2]), c.chart.canvasbgangle !== undefined ? c.chart.canvasbgangle : 0, c.chart.canvasbgcolor ? c.chart.canvasbgcolor : "FFFFFF", c.chart.canvasbgalpha ? c.chart.canvasbgalpha : "100", c.chart.canvasbgratio ? c.chart.canvasbgratio : ""));
            return g
        }
        FCC.dataFormat = 'json';
        FCC.render = function (b, c) {
            var d, sender = this,
                events = {
                    loaded: 'FC_Loaded',
                    dataloaded: 'FC_DataLoaded',
                    rendered: 'FC_Rendered',
                    drawcomplete: 'FC_DrawComplete'
                };
            if (FCC.isReady()) {
                d = F.call(this, b.id, true);
                d.chart.events.load = function () {
                    setTimeout(function () {
                        for (var a in events) {
                            M.raiseEvent(a, {}, sender);
                            try {
                                if (typeof window[events[a]] === 'function') {
                                    window[events[a]](sender.id)
                                }
                            } catch (err) {
                                setTimeout(function () {
                                    throw err;
                                }, 0)
                            }
                        }
                    }, 0)
                };
                createChart.call(this, c, d)
            } else {
                renderArray.push([this, b, c])
            }
        };
        FCC.update = function (b, c) {
            var d = this.id,
                __containerId = this.options.containerElementId,
                sender = this,
                HCJson, events = {
                    dataloaded: 'FC_DataLoaded',
                    drawcomplete: 'FC_DrawComplete'
                };
            if (typeof __containerId !== 'undefined' && typeof FCC.items[d] !== 'undefined') {
                if (!c) {
                    delete n[d].msgTxt;
                    if (this.jsVars) {
                        delete this.jsVars.stallLoad;
                        delete this.jsVars.LoadError
                    }
                }
                HCJson = F.call(this, __containerId);
                if (c) {
                    HCJson.plotOptions.series.animation = false
                }
                HCJson.chart.events.load = function () {
                    setTimeout(function () {
                        for (var a in events) {
                            M.raiseEvent(a, {}, sender);
                            try {
                                if (typeof window[events[a]] === 'function') {
                                    window[events[a]](sender.id)
                                }
                            } catch (err) {
                                setTimeout(function () {
                                    throw err;
                                }, 0)
                            }
                        }
                    }, 0)
                };
                createChart.call(this, undefined, HCJson)
            }
        };
        FCC.resize = function () {
            FCC.update.call(this, undefined, true)
        };
        var L = function () {};
        L.prototype = {
            "LoadDataErrorText": 'Error in loading data.',
            "XMLLoadingText": 'Retrieving Data. Please Wait',
            "InvalidXMLText": 'Invalid data.',
            "NoDataText": 'No data to display.',
            "ReadingDataText": 'Reading Data. Please Wait',
            "ChartNotSupported": 'Chart Has No Javascript FallBack'
        };
        L.prototype.constructor = L;
        M.addEventListener('Disposed', function (e) {
            delete n[e.sender.id]
        });
        M.addEventListener('BeforeInitialize', function (e) {
            n[e.sender.id] = new L()
        });
        FCC.config = function (a) {
            M.extend(n[this.id], a)
        };
        M.addEventListener('DataLoadRequested', function (a) {
            var b = a.sender;
            if (b.options.renderer !== 'javascript') {
                return
            }
            if (!b.jsVars) {
                b.jsVars = {}
            }
            if (b.ref && typeof b.ref.showChartMessage === 'function') {
                b.jsVars.stallLoad = true;
                b.ref.showChartMessage(n[b.id].XMLLoadingText)
            } else {
                b.jsVars.stallLoad = true
            }
        });
        M.addEventListener('DataLoadRequestCompleted', function (a, b) {
            var c = a.sender;
            if (c.options.renderer !== 'javascript') {
                return
            }
            if (c.jsVars) {
                delete c.jsVars.stallLoad;
                delete c.jsVars.LoadError
            }
        });
        M.addEventListener('DataLoadError', function (a, b) {
            var c = a.sender;
            if (c.options.renderer !== 'javascript') {
                return
            }
            if (!c.jsVars) {
                c.jsVars = {}
            }
            if (c.ref) {
                c.jsVars.LoadError = true;
                c.ref.showChartMessage(n[c.id].LoadDataErrorText)
            } else {
                c.jsVars.LoadError = true
            }
        });
        M.addEventListener('BeforeDispose', function (e) {
            if (e.sender.options.renderer !== 'javascript') {
                return
            }
            removeChart(e.sender.id, true)
        })
    };
    M.renderer.register('javascript', FCC);
    if (/\(iPhone;|\(iPod;|\(iPad;/i.test(navigator.userAgent)) {
        M.renderer.setDefault('javascript')
    }
    M.extend({
        '_fallbackJSChartWhenNoFlash': function () {
            if (!M.swfobject.hasFlashPlayerVersion(M.core.options.requiredFlashPlayerVersion)) {
                M.renderer.setDefault('javascript')
            }
        }
    })
}());
(function () {
    var b = FusionCharts(['private', 'XMLDataHandler']);
    if (b === undefined) {
        return
    }
    var c = function (a) {
        return {
            data: a,
            error: undefined
        }
    };
    b.addDataHandler('XML', {
        encode: c,
        decode: c
    })
}());
if (!this.JSON) {
    this.JSON = {}
}(function () {
    function f(n) {
        return n < 10 ? '0' + n : n
    }
    if (typeof Date.prototype.toJSON !== 'function') {
        Date.prototype.toJSON = function (a) {
            return isFinite(this.valueOf()) ? this.getUTCFullYear() + '-' + f(this.getUTCMonth() + 1) + '-' + f(this.getUTCDate()) + 'T' + f(this.getUTCHours()) + ':' + f(this.getUTCMinutes()) + ':' + f(this.getUTCSeconds()) + 'Z' : null
        };
        String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function (a) {
            return this.valueOf()
        }
    }
    var e = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        gap, indent, meta = {
            '\b': '\\b',
            '\t': '\\t',
            '\n': '\\n',
            '\f': '\\f',
            '\r': '\\r',
            '"': '\\"',
            '\\': '\\\\'
        },
        rep;

    function quote(b) {
        escapable.lastIndex = 0;
        return escapable.test(b) ? '"' + b.replace(escapable, function (a) {
            var c = meta[a];
            return typeof c === 'string' ? c : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4)
        }) + '"' : '"' + b + '"'
    }
    function str(a, b) {
        var i, k, v, length, mind = gap,
            partial, value = b[a];
        if (value && typeof value === 'object' && typeof value.toJSON === 'function') {
            value = value.toJSON(a)
        }
        if (typeof rep === 'function') {
            value = rep.call(b, a, value)
        }
        switch (typeof value) {
        case 'string':
            return quote(value);
        case 'number':
            return isFinite(value) ? String(value) : 'null';
        case 'boolean':
        case 'null':
            return String(value);
        case 'object':
            if (!value) {
                return 'null'
            }
            gap += indent;
            partial = [];
            if (Object.prototype.toString.apply(value) === '[object Array]') {
                length = value.length;
                for (i = 0; i < length; i += 1) {
                    partial[i] = str(i, value) || 'null'
                }
                v = partial.length === 0 ? '[]' : gap ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : '[' + partial.join(',') + ']';
                gap = mind;
                return v
            }
            if (rep && typeof rep === 'object') {
                length = rep.length;
                for (i = 0; i < length; i += 1) {
                    k = rep[i];
                    if (typeof k === 'string') {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v)
                        }
                    }
                }
            } else {
                for (k in value) {
                    if (Object.hasOwnProperty.call(value, k)) {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (gap ? ': ' : ':') + v)
                        }
                    }
                }
            }
            v = partial.length === 0 ? '{}' : gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : '{' + partial.join(',') + '}';
            gap = mind;
            return v
        }
    }
    if (typeof JSON.stringify !== 'function') {
        JSON.stringify = function (a, b, c) {
            var i;
            gap = '';
            indent = '';
            if (typeof c === 'number') {
                for (i = 0; i < c; i += 1) {
                    indent += ' '
                }
            } else if (typeof c === 'string') {
                indent = c
            }
            rep = b;
            if (b && typeof b !== 'function' && (typeof b !== 'object' || typeof b.length !== 'number')) {
                throw new Error('JSON.stringify');
            }
            return str('', {
                '': a
            })
        }
    }
    if (typeof JSON.parse !== 'function') {
        JSON.parse = function (c, d) {
            var j;

            function walk(a, b) {
                var k, v, value = a[b];
                if (value && typeof value === 'object') {
                    for (k in value) {
                        if (Object.hasOwnProperty.call(value, k)) {
                            v = walk(value, k);
                            if (v !== undefined) {
                                value[k] = v
                            } else {
                                delete value[k]
                            }
                        }
                    }
                }
                return d.call(a, b, value)
            }
            c = String(c);
            e.lastIndex = 0;
            if (e.test(c)) {
                c = c.replace(e, function (a) {
                    return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4)
                })
            }
            if (/^[\],:{}\s]*$/.test(c.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
                j = eval('(' + c + ')');
                return typeof d === 'function' ? walk({
                    '': j
                }, '') : j
            }
            throw new SyntaxError('JSON.parse');
        }
    }
}());
var fastTrim = function (a) {
    a = a.replace(/^\s\s*/, '');
    var b = /\s/,
        i = a.length;
    while (b.test(a.charAt(i -= 1))) {}
    return a.slice(0, i + 1)
};
(function () {
    var j = FusionCharts(['private', 'JSON_DataHandler']);
    if (j === undefined) {
        return
    }
    var k = function (s) {
        if (s === null || s === undefined || typeof s.toString !== 'function') {
            return ''
        }
        s = s.toString().replace(/&/g, '&amp;').replace(/\'/g, '&#39;').replace(/\"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
        return s
    };
    var l = (function () {
        var e = {
            arr: {
                set: true,
                trendlines: true,
                vtrendlines: true,
                line: true,
                data: true,
                dataset: true,
                categories: true,
                category: true,
                linkeddata: true,
                application: true,
                definition: true,
                axis: true
            },
            tag: {
                chart: 'linkedchart',
                map: 'linkedmap',
                graph: 'linkedgraph',
                set: 'data',
                vline: {
                    chart: 'data',
                    graph: 'data',
                    dataset: 'data',
                    categories: 'category',
                    linkedchart: 'data',
                    linkedgraph: 'data'
                },
                apply: {
                    application: 'application'
                },
                style: {
                    definition: 'definition'
                }
            },
            attr: {
                vline: {
                    vline: 'true'
                }
            },
            ins: {
                chart: true,
                map: true,
                graph: true
            },
            text: {
                dataset: 'data',
                categories: 'category'
            },
            group: {
                styles: {
                    definition: true,
                    application: true
                }
            }
        };
        var f = 1,
            XML_TEXTNODE = 3;
        var g = {
            append: function (a, b, c) {
                if (e.arr[c] === true) {
                    if (!(b[c] instanceof Array)) {
                        b[c] = []
                    }
                    b[c].push(a)
                } else {
                    b[c] = a
                }
            },
            child: function (a, b, c, d) {
                var i, nodeName, childObj, temp;
                for (i = 0; i < b.length; i += 1) {
                    nodeName = b[i].nodeName.toLowerCase();
                    if (b[i].nodeType === f) {
                        childObj = g.attr(b[i].attributes);
                        if (e.ins[nodeName] === true) {
                            temp = childObj;
                            childObj = {};
                            childObj[nodeName] = temp;
                            temp = undefined
                        }
                        if (typeof e.attr[nodeName] === 'object') {
                            j.extend(childObj, e.attr[nodeName])
                        }
                        if (typeof e.tag[nodeName] === 'object' && typeof e.tag[nodeName][c] === 'string') {
                            nodeName = e.tag[nodeName][c]
                        }
                        if (typeof e.tag[nodeName] === 'string') {
                            nodeName = e.tag[nodeName]
                        }
                        if (b[i].childNodes.length) {
                            if (e.group[c] && e.group[c][nodeName]) {
                                g.child(a, b[i].childNodes, nodeName, d)
                            } else {
                                g.child(childObj, b[i].childNodes, nodeName, d)
                            }
                        }
                        if (!(e.group[c] && e.group[c][nodeName])) {
                            g.append(childObj, a, nodeName)
                        }
                    } else if (b[i].nodeType === XML_TEXTNODE && d.chart && parseInt(d.chart.compactdatamode, 10) && typeof e.text[c] === 'string') {
                        nodeName = e.text[c];
                        childObj = b[i].data;
                        g.append(childObj, a, nodeName)
                    }
                }
            },
            attr: function (a) {
                var i, obj = {};
                if (!a || !a.length) {
                    return obj
                }
                for (i = 0; i < a.length; i += 1) {
                    obj[a[i].nodeName.toLowerCase()] = a[i].nodeValue
                }
                return obj
            }
        };
        var h = function (a) {
            var b = {},
                xmlDoc, root, rootName;
            if (a === undefined || a === null || typeof a.toString !== 'function') {
                h.errorObject = new TypeError('xml2json.parse()');
                return b
            }
            a = a.toString().replace(/<\!--[\s\S]*?-->/g, '').replace(/<\?xml[\s\S]*?\?>/ig, '').replace(/&(?!([^;\n\r]+?;))/g, '&amp;$1');
            a = fastTrim(a);
            if (!a) {
                return b
            }
            if (window.DOMParser) {
                xmlDoc = (new window.DOMParser()).parseFromString(a, "text/xml")
            } else {
                xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
                xmlDoc.async = "false";
                xmlDoc.loadXML(a)
            }
            if (!(xmlDoc.childNodes.length === 1 && (root = xmlDoc.childNodes[0]) && root.nodeName && (rootName = root.nodeName.toLowerCase()) && (rootName === 'chart' || rootName === 'map' || rootName === 'graph'))) {
                h.errorObject = new TypeError('xml2json.parse()');
                return b
            }
            b[rootName] = g.attr(root.attributes);
            if (root.childNodes) {
                g.child(b, root.childNodes, rootName, b)
            }
            delete h.errorObject;
            return b
        };
        return function (a) {
            delete h.errorObject;
            var b = h(a);
            return {
                data: b,
                error: h.errorObject
            }
        }
    }());
    var m = (function () {
        var d = {
            items: {
                explode: {
                    data: 'set'
                },
                attr: {
                    chart: {
                        chart: 'chart',
                        graph: 'chart'
                    },
                    graph: {
                        graph: 'graph',
                        chart: 'graph'
                    },
                    map: {
                        map: 'map'
                    },
                    linkedchart: {
                        chart: 'chart',
                        graph: 'graph',
                        map: 'map'
                    }
                },
                group: {
                    styles: {
                        definition: 'style',
                        application: 'apply'
                    }
                }
            },
            qualify: function (a, b, c) {
                c = c.toLowerCase();
                return typeof this.items[a][c] === 'object' ? this.items[a][c][b.toLowerCase()] : this.items[a][c]
            }
        };
        var f = function (a, b) {
            var c = '',
                innerXML = '',
                nodeName = '',
                outerXML = '',
                item, qualifier;
            if (a instanceof Array) {
                for (item = 0; item < a.length; item += 1) {
                    if (typeof a[item] === 'string') {
                        outerXML += k(a[item])
                    } else {
                        outerXML += f(a[item], b)
                    }
                }
            } else {
                for (item in a) {
                    if (a[item] instanceof Array && (qualifier = d.qualify('group', item, b))) {
                        innerXML += '<' + item + '>' + f(a[item], qualifier) + '</' + item + '>'
                    } else if (typeof a[item] === 'object') {
                        if ((qualifier = d.qualify('attr', item, b))) {
                            nodeName = f(a[item], qualifier).replace(/\/\>/ig, '');
                            b = item
                        } else {
                            innerXML += f(a[item], item)
                        }
                    } else {
                        if (item.toLowerCase() === 'vline' && Boolean(a[item])) {
                            b = 'vLine'
                        } else {
                            c += ' ' + item + '=\"' + k(a[item]).toString().replace(/\"/ig, '&quot;') + '\"'
                        }
                    }
                }
                if ((qualifier = d.qualify('explode', item, b))) {
                    b = qualifier
                }
                outerXML = (nodeName !== '' ? nodeName : '<' + b) + c + (innerXML !== '' ? '>' + innerXML + '</' + b + '>' : ' />')
            }
            return outerXML
        };
        return function (a) {
            delete f.errorObject;
            if (a && typeof a === 'string') {
                try {
                    a = JSON.parse(a)
                } catch (e) {
                    f.errorObject = e
                }
            }
            var b = f(a, a && a.graph ? 'graph' : 'chart');
            return {
                data: b,
                error: f.errorObject
            }
        }
    }());
    j.addDataHandler('JSON', {
        encode: function (a) {
            return m(a)
        },
        decode: function (a) {
            return l(a)
        }
    })
}());
(function () {
    var f = FusionCharts(['private', 'LinkManager']);
    if (f === undefined) {
        return
    }
    f.policies.link = ['link', undefined];
    var g = {};
    var h = function (a, b) {
        this.items = {};
        this.root = a;
        this.parent = b;
        if (b instanceof f.core) {
            this.level = this.parent.link.level + 1
        } else {
            g[a.id] = [{}];
            this.level = 0
        }
    };
    h.prototype.configuration = function () {
        var a = g[this.root.id][this.level] || (g[this.root.id][this.level] = {});
        if (typeof a.id === 'undefined') {
            a.id = g[this.root.id][this.level].id = f.uniqueId()
        }
        return a
    };
    f.extend({
        configureLink: function (a, b) {
            if (a instanceof Array) {
                for (var i = 0; i < a.length; i += 1) {
                    if (typeof g[this.link.root.id][i] !== 'object') {
                        g[this.link.root.id][i] = {}
                    }
                    f.extend(g[this.link.root.id][i], a[i])
                }
                g[this.link.root.id].splice(a.length)
            } else if (typeof a === 'object') {
                if (typeof b !== 'number') {
                    b = this.link.level
                }
                if (g[this.link.root.id][b] === undefined) {
                    g[this.link.root.id][b] = {}
                }
                f.extend(g[this.link.root.id][b], a)
            } else {
                f.raiseError(this, '25081731', 'param', '~configureLink()', 'Unable to update link configuration from set parameters')
            }
        }
    }, true);
    f.addEventListener('BeforeInitialize', function (a) {
        if (!(a.sender.link instanceof h)) {
            a.sender.link = new h(a.sender)
        } else {
            if (a.sender.link.parent instanceof f.core) {
                a.sender.link.parent.link.items[a.sender.id] = a.sender
            }
        }
    });
    f.addEventListener('LinkedChartInvoked', function (a, b) {
        var c = a.sender,
            param = c.clone({
                dataSource: b.data,
                dataFormat: b.linkType === 'URL' ? FusionChartsDataFormats.XMLURL : b.linkType,
                link: new h(c.link.root, c)
            }, true);
        if (c.args && parseInt(c.args.animate, 10) !== 0) {
            delete param.animate
        }
        f.extend(param, c.link.configuration());
        f.raiseEvent('BeforeLinkedItemOpen', {
            level: c.link.level
        }, c.link.root);
        if (f.core.items[param.id] instanceof f.core && param.strictLinkId === true) {
            f.core.items[param.id].dispose()
        }
        var d = new f.core(param).render();
        f.raiseEvent('LinkedItemOpened', {
            level: c.link.level,
            item: d
        }, c.link.root)
    });
    f.addEventListener('OverlayButtonClick', function (a) {
        var b = a.sender,
            level = b.link.level - 1,
            parent = b.link.parent;
        f.raiseEvent('BeforeLinkedItemClose', {
            level: level,
            item: b
        }, b.link.root);
        b.dispose();
        f.raiseEvent('LinkedItemClosed', {
            level: level
        }, b.link.root);
        if (!parent.isActive() && b.options.containerElement === parent.options.containerElement && b.options.insertMode === 'replace') {
            parent.render()
        }
    });
    f.addEventListener('Loaded', function (a) {
        var b = a.sender;
        if (!b || b.link === undefined) {
            return
        }
        if (b.link.root === b || !(b.link.parent instanceof f.core)) {
            return
        }
        if (!(b.ref && typeof b.ref.drawOverlayButton === 'function')) {
            f.raiseWarning(b, '04091602', 'run', '::LinkManager^Loaded', 'Unable to draw overlay button on object. -' + b.id);
            return
        }
        var c = f.extend({
            show: true
        }, b.link.parent.options.overlayButton);
        f.extend(c, b.link.parent.link.configuration().overlayButton || {});
        b.ref.drawOverlayButton(c)
    });
    f.addEventListener('BeforeDispose', function (e) {
        var a = e.sender;
        if (!(a && a.link instanceof h)) {
            return
        }
        if (a.link.parent instanceof f.core) {
            delete a.link.parent.link.items[e.sender.id]
        }
        delete g[a.id]
    });
    FusionChartsEvents.LinkedItemOpened = 'linkeditemopened';
    FusionChartsEvents.BeforeLinkedItemOpen = 'beforelinkeditemopen';
    FusionChartsEvents.LinkedItemClosed = 'linkeditemclosed';
    FusionChartsEvents.BeforeLinkedItemClose = 'beforelinkeditemclose'
}());
(function () {
    var j = FusionCharts(['private', 'PrintManager']);
    if (j === undefined) {
        return
    }
    var k = {
        enabled: false,
        invokeCSS: true,
        processPollInterval: 2000,
        message: 'Chart is being prepared for print.',
        useExCanvas: false,
        bypass: false
    };
    var l = {
        getCanvasElementOf: function (a, b, c) {
            if (a.__fusioncharts__canvascreated !== true) {
                var d = document.createElement('canvas'),
                    identifier = j.core.items[a.id].attributes['class'];
                if (k.useExCanvas && G_vmlCanvasManager) {
                    G_vmlCanvasManager.initElement(d)
                }
                d.setAttribute('class', identifier);
                d.__fusioncharts__reference = a.id;
                a.parentNode.insertBefore(d, a.nextSibling);
                a.__fusioncharts__canvascreated = true
            }
            a.nextSibling.setAttribute('width', b || a.offsetWidth || 2);
            a.nextSibling.setAttribute('height', c || a.offsetHeight || 2);
            return a.nextSibling
        },
        removeCanvasElementOf: function (a) {
            if (a.__fusioncharts__canvascreated !== true || !a.parentNode || a.parentNode === null) {
                return
            }
            a.parentNode.removeChild(a.nextSibling);
            a.__fusioncharts__canvascreated = false
        },
        rle2rgba: function (a, c, d) {
            if (typeof d !== 'string') {
                d = "FFFFFF"
            }
            var e = a.split(/[;,_]/),
                run, i, r, g, b, x = 0;
            for (i = 0; i < e.length; i += 2) {
                if (e[i] === '') {
                    e[i] = d
                }
                e[i] = ('000000' + e[i]).substr(-6);
                r = parseInt('0x' + e[i].substring(0, 2), 16);
                g = parseInt('0x' + e[i].substring(2, 4), 16);
                b = parseInt('0x' + e[i].substring(4, 6), 16);
                for (run = 0; run < e[i + 1]; run += 1) {
                    c[x] = r;
                    c[x + 1] = g;
                    c[x + 2] = b;
                    c[x + 3] = 255;
                    x += 4
                }
            }
            return c
        },
        rle2array: function (a, b) {
            if (typeof b !== 'string') {
                b = "FFFFFF"
            }
            var c = a.split(';'),
                run, i;
            for (run in c) {
                c[run] = c[run].split(/[_,]/);
                for (i = 0; i < c[run].length; i += 2) {
                    c[run][i] = c[run][i] === '' ? b : ('000000' + c[run][i]).substr(-6)
                }
            }
            return c
        },
        drawRLE: function (a, b, c, d, e) {
            c = c || 2;
            d = d || 2;
            a.setAttribute('width', c);
            a.setAttribute('height', d);
            var f = a.getContext('2d'),
                imageData;
            if (typeof f.putImageData === 'function' && typeof f.createImageData === 'function') {
                imageData = f.createImageData(c, d);
                l.rle2rgba(b, imageData.data, e);
                f.putImageData(imageData, 0, 0)
            } else {
                imageData = l.rle2array(b, e);
                var x = 0,
                    y = 0,
                    z = 0;
                for (y in imageData) {
                    x = 0;
                    for (z = 0; z < imageData[y].length; z += 2) {
                        f.fillStyle = "#" + imageData[y][z];
                        f.fillRect(x, y, imageData[y][z + 1], 1);
                        x += parseInt(imageData[y][z + 1], 10)
                    }
                }
            }
            return true
        },
        drawText: function (a, b, c, d) {
            var e = a.getContext('2d'),
                w = c || 2,
                h = d || 2;
            e.clearRect(0, 0, w, h);
            e.textBaseline = 'middle';
            e.textAlign = 'center';
            e.font = '8pt verdana';
            e.fillStyle = '#776666';
            if (typeof e.fillText === 'function') {
                e.fillText(b, w / 2, h / 2)
            } else if (typeof e.mozDrawText === 'function') {
                e.translate(w / 2, h / 2);
                e.mozDrawText(b)
            } else {
                j.raiseWarning(j.core, '25081803', 'run', '::PrintManager>lib.drawText', 'Canvas text drawing is not supported in browser')
            }
            return true
        },
        appendCSS: function (a) {
            var b = document.createElement('style');
            b.setAttribute('type', 'text/css');
            if (typeof b.styleSheet === 'undefined') {
                b.appendChild(document.createTextNode(a))
            } else {
                b.styleSheet.cssText = a
            }
            return document.getElementsByTagName('head')[0].appendChild(b)
        }
    };
    var m = {
        styles: {
            print: 'canvas.FusionCharts{display:none;}@media print{object.FusionCharts{display:none;}canvas.FusionCharts{display:block;}}',
            error: 'canvas.FusionCharts{display:none;}',
            normal: ''
        },
        cssNode: undefined,
        invoke: function (a) {
            if (typeof this.styles[a] !== 'undefined') {
                a = this.styles[a]
            }
            if (typeof a !== 'undefined') {
                if (this.cssNode !== undefined && this.cssNode.parentNode !== undefined) {
                    this.cssNode.parentNode.removeChild(this.cssNode)
                }
                m.cssNode = l.appendCSS(a)
            }
        }
    },
        activeItems = {},
        queuedItems = {},
        activeCount = 0,
        queueTrigger;
    var n = function (a) {
        var b = a.sender.ref,
            w, h;
        if (b === undefined || typeof b.prepareImageDataStream !== 'function' || b.prepareImageDataStream() === false) {
            queueTrigger(a.sender);
            return
        }
        if (!activeItems[a.sender.id]) {
            activeItems[a.sender.id] = b;
            activeCount += 1;
            if (activeCount === 1) {
                j.raiseEvent('PrintReadyStateChange', {
                    ready: false,
                    bypass: k.bypass
                }, a.sender)
            }
        }
        try {
            w = b.offsetWidth;
            h = b.offsetHeight;
            l.drawText(l.getCanvasElementOf(b, w, h), k.message, w, h)
        } catch (e) {
            m.invoke('error');
            j.raiseError(a.sender, '25081807', 'run', '::PrintManager>onDrawComplete', 'There was an error while showing message to user via canvas.')
        }
    },
        onImageStreamReady = function (a, b) {
            try {
                if (l.drawRLE(l.getCanvasElementOf(a.sender.ref, b.width, b.height), b.stream, b.width, b.height, b.bgColor) === true) {
                    if (activeItems[a.sender.id]) {
                        delete activeItems[a.sender.id];
                        activeCount -= 1;
                        if (activeCount === 0) {
                            j.raiseEvent('PrintReadyStateChange', {
                                ready: true,
                                bypass: k.bypass
                            }, a.sender)
                        }
                    }
                }
            } catch (e) {
                m.invoke('error');
                j.raiseError(a.sender, '25081810', 'run', '::PrintManager>onImageStreamReady', 'There was an error while drawing canvas.')
            }
        },
        onBeforeDispose = function (a) {
            l.removeCanvasElementOf(a.sender.ref)
        },
        subscribeToEvents = function (a) {
            var b = a ? 'addEventListener' : 'removeEventListener';
            j.core[b]('ImageStreamReady', onImageStreamReady);
            j.core[b]('DrawComplete', n);
            j.core[b]('BeforeDispose', onBeforeDispose)
        },
        initialize = function () {
            if (k.invokeCSS === true) {
                m.invoke('print')
            }
            for (var a in j.core.items) {
                queueTrigger(j.core.items[a]);
                queueTrigger()
            }
        },
        destroy = function () {
            m.invoke('error');
            for (var a in j.core.items) {
                if (j.core.items[a].ref === undefined) {
                    continue
                }
                l.removeCanvasElementOf(j.core.items[a].ref)
            }
            m.invoke('normal')
        };
    queueTrigger = function (a) {
        if (a instanceof j.core) {
            queuedItems[a.id] = a;
            return
        }
        for (var b in queuedItems) {
            n({
                sender: queuedItems[b]
            }, {});
            delete queuedItems[b]
        }
    };
    j.extend({
        printManager: {
            configure: function (a) {
                j.extend(k, a || {})
            },
            isReady: function () {
                if (k.bypass) {
                    return true
                }
                if (activeCount > 0 || !k.enabled) {
                    return false
                }
                var a, ref;
                for (a in j.core.items) {
                    if ((ref = j.core.items[a].ref) === undefined) {
                        continue
                    }
                    if (ref.hasRendered && ref.hasRendered() === false) {
                        return false
                    }
                }
                return true
            },
            enabled: function (a) {
                if (a === undefined) {
                    return k.enabled
                }
                if ('\v' === 'v' || j.renderer.currentRendererName() !== 'flash' || typeof document.createElement('canvas').getContext !== 'function') {
                    k.bypass = true;
                    j.raiseEvent('PrintReadyStateChange', {
                        ready: true,
                        bypass: k.bypass
                    });
                    j.raiseWarning(j.core, '25081816', 'run', '.printManager.enabled', 'printManager is not compatible with your browser');
                    return k.enabled
                }
                k.bypass = false;
                subscribeToEvents(a);
                if (a === true) {
                    initialize()
                } else {
                    destroy()
                }
                return (k.enabled = a)
            },
            managedPrint: function () {
                if (k.bypass) {
                    window.print();
                    return
                }
                if (!j.core.printManager.isReady()) {
                    if (j.core.printManager.enabled(true) !== true) {
                        window.print();
                        return
                    }
                    j.addEventListener('PrintReadyStateChange', j.core.printManager.managedPrint);
                    return
                }
                if (typeof arguments[1] === 'object' && arguments[1].ready !== true) {
                    return
                }
                j.removeEventListener('PrintReadyStateChange', j.core.printManager.managedPrint);
                window.print()
            }
        }
    }, false);
    FusionChartsEvents.PrintReadyStateChange = 'printreadystatechange'
}());